tornado 4.5.2 配置模板

tornado 4.5.2

配置模板

  • 默认情况下,Tornado会查找Application setting中template_path。
  • 如果当前代码中不同的处理函数有不同的模板路径,且重写了RequeHandler.get_template_path方法,那么template_path为该方法返回的路径。
  • 源代码如下
def get_template_path(self):
    """Override to customize template path for each handler.

    By default, we use the ``template_path`` application setting.
    Return None to load templates relative to the calling file.
    """
    return self.application.settings.get("template_path")
  • 如果没有找到那么tornado就会在和当前.py文件相同的目录查找相关联的模板文件。源代码如下:
    def render_string(self, template_name, **kwargs):
        """Generate the given template with the given arguments.

        We return the generated byte string (in utf8). To generate and
        write a template as a response, use render() above.
        """
        # If no template_path is specified, use the path of the calling file
        template_path = self.get_template_path()
        
        """
        如下代码表明没找到template_path的情况下,会查找同目录下相关联的模板文件
        """ 
        if not template_path:
            frame = sys._getframe(0)
            web_file = frame.f_code.co_filename
            while frame.f_code.co_filename == web_file:
                frame = frame.f_back
            template_path = os.path.dirname(frame.f_code.co_filename)
        with RequestHandler._template_loader_lock:
            if template_path not in RequestHandler._template_loaders:
                loader = self.create_template_loader(template_path)
                RequestHandler._template_loaders[template_path] = loader
            else:
                loader = RequestHandler._template_loaders[template_path]
        t = loader.load(template_name)
        namespace = self.get_template_namespace()
        namespace.update(kwargs)
        return t.generate(**namespace)
  • 为了从非文件系统位置加载模板,实例化子类tornado.template.BaseLoader 并为其在应用设置(application setting)中配置template_loader。

  • 默认情况下编译出来的模板会被缓存;为了不被缓存和修改代码后重加载总是可见,使用应用设置(application settings)中的compiled_template_cache=False 或 debug=True。

  • tornado.web.Application可以说是一个设置容器。

推荐阅读更多精彩内容