创新互联Tornado教程:Tornado灵活的输出生成

一个简单的模板系统,将模板编译成 python 代码。

让客户满意是我们工作的目标,不断超越客户的期望值来自于我们对这个行业的热爱。我们立志把好的技术通过有效、简单的方式提供给客户,将通过不懈努力成为客户在信息化领域值得信任、有价值的长期合作伙伴,公司提供的服务项目有:域名注册雅安服务器托管、营销软件、网站建设、南雄网站维护、网站推广。

基本用法如下:

t = template.Template("{{ myvalue }}")
print(t.generate(myvalue="XXX"))

Loader ​是一个从根目录加载模板并缓存编译好的模板的类:

loader = template.Loader("/home/btaylor")
print(loader.load("test.html").generate(myvalue="XXX"))

我们将所有模板编译为原始 Python

### base.html

  
    {% block title %}Default title{% end %}
  
  
    
    {% for student in students %} {% block student %}
  • {{ escape(student.name) }}
  • {% end %} {% end %}
### bold.html {% extends "base.html" %} {% block title %}A bolder title{% end %} {% block student %}
  • {{ escape(student.name) }}
  • {% end %}

    与大多数其他模板系统不同,我们对您可以包含在语句中的表达式没有任何限制。 ​if​和 ​for块被完全翻译成 Python,所以你可以做复杂的表达式,比如:

    {% for student in [p for p in people if p.student and p.age > 23] %}
      
  • {{ escape(student.name) }}
  • {% end %}

    直接翻译成 Python 意味着您可以轻松地将函数应用于表达式,例如上面示例中的 ​escape()​ 函数。 您可以像任何其他变量一样将函数传递给模板(在 ​RequestHandler中,覆盖 ​RequestHandler.get_template_namespace​):

    ### Python code
    def add(x, y):
       return x + y
    template.execute(add=add)
    
    ### The template
    {{ add(1, 2) }}

    我们默认为所有模板提供函数​escape()​、​url_escape()​、​json_encode()和​squeeze()

    典型的应用程序不会手动创建 Template 或 Loader 实例,而是使用 tornado.web.RequestHandler 的 ​render和 ​render_string方法,它们会根据 template_path 应用程序设置自动加载模板。

    以​_tt_​开头的变量名由模板系统保留,不应由应用程序代码使用。

    语法参考

    模板表达式用双花括号括起来:​{{ ... }}​。 内容可以是任何 python 表达式,将根据当前的自动转义设置进行转义并插入到输出中。 其他模板指令使用 ​{% %}​。

    要注释掉某个部分以使其从输出中省略,请用 ​{# ... #}​ 将其括起来。

    要在输出中包含文字{{​、​{%{#)​,请将它们分别转义为​{{!​、​{%!{#!)​。

    {% apply *function* %}...{% end %}

    对 ​apply​和end之间的所有模板代码的输出应用一个函数:

    {% apply linkify %}{{name}} said: {{message}}{% end %}

    请注意,作为实现细节,应用块被实现为嵌套函数,因此可能会与通过 ​{% set %}​ 设置的变量或在循环中使用 ​{% break %}​ 或 ​{% continue %}​ 进行奇怪的交互。

    ​{% autoescape *function* %}

     设置当前文件的自动转义模式。 这不会影响其他文件,即使是 ​{% include %}​ 引用的文件。 请注意,也可以在 ​Application​或 ​Loader上全局配置自动转义:

    {% autoescape xhtml_escape %}
    {% autoescape None %}

    {% block *name* %}...{% end %}

    表示与 ​{% extends %}​ 一起使用的命名的、可替换的块。 父模板中的块将替换为子模板中同名块的内容。:

    
    {% block title %}Default title{% end %}
    
    
    {% extends "base.html" %}
    {% block title %}My page title{% end %}

    {% comment ... %}

    将从模板输出中删除的注释。 注意没有 ​{% end %}​ 标签; 注释从单词 ​comment到结束 ​%}​ 标记。

    {% extends *filename* %}

    从另一个模板继承。 使用扩展的模板应该包含一个或多个块标签来替换父模板的内容。 子模板中未包含在块标记中的任何内容都将被忽略。 例如,请参阅 ​{% block %}​ 标签。

    {% for *var* in *expr* %}...{% end %}

    与python for 语句相同。 ​{% break %}​ 和 ​{% continue %}​ 可以在循环内使用。

    {% from *x* import *y* %}

    与 python 导入语句相同。

    {% if *condition* %}...{% elif *condition* %}...{% else %}...{% end %}

    条件语句 - 输出条件为真的第一部分。(​elif ​和 ​else ​部分是可选的)

    {% import *module* %}

    与 python 导入语句相同。

    {% include *filename* %}

    包括另一个模板文件。 被包含的文件可以看到所有的局部变量,就好像它被直接复制到了包含指令的位置(​{% autoescape %}指令是一个例外)。 或者,​{% module Template(filename, **kwargs) %}​ 可用于包含另一个具有单独命名空间的模板。

    {% module *expr* %}

    渲染一个 UIModule。 UIModule 的输出不会被转义:

    {% module Template("foo.html", arg=42) %}

    UIModules是​tornado.web.RequestHandler​类(特别是它的渲染方法)的一个特性,当模板系统在其他上下文中单独使用时将不起作用。

    {% raw *expr* %}

    输出给定表达式的结果而不自动转义。

    {% set *x* = *y* %}

    设置一个局部变量。

    {% try %}...{% except %}...{% else %}...{% finally %}...{% end %}

    与 python try 语句相同。

    {% while *condition* %}... {% end %}

    与 python while 语句相同。 ​{% break %}​ 和 ​{% continue %}​ 可以在循环内使用。

    {% whitespace *mode* %}

    为当前文件的其余部分设置空白模式(或直到下一个 ​{% whitespace %}​ 指令)。

    类参考

    class tornado.template.Template(template_string, name="", loader=None, compress_whitespace=None, autoescape="xhtml_escape", whitespace=None)

    我们从给定的 template_string 编译成 Python。 您可以使用 generate() 从变量中生成模板。

    参数:

    template_string​(str) - 模板文件的内容。

    name ​(str) -- 加载模板的文件名(用于错误消息)。

    loader ​(tornado.template.BaseLoader) -- 负责此模板的 BaseLoader,用于解析 {% include %} 和 {% extend %} 指令。

    compress_whitespace ​(bool) – 自 Tornado 4.3 起已弃用。 如果为 true,则等效于 whitespace="single",如果为 false,则等效于 whitespace="all"。

    autoescape ​(str) -- 模板命名空间中的函数名称,或 None 默认禁用转义。

    whitespace ​(str) -- 指定空格处理的字符串

    在 4.3 版更改: 添加​whitespace​参数; 不推荐使用 ​compress_whitespace​。

    class tornado.template.BaseLoader(autoescape: str = 'xhtml_escape', namespace: Optional[Dict[str, Any]] = None, whitespace: Optional[str] = None)

    您必须使用模板加载器才能使用 {% extends %} 和 {% include %} 等模板结构。 加载器在第一次加载后缓存所有模板。

    参数:

    • autoescape ​(str) – 模板命名空间中的函数名称,例如“xhtml_escape”,或 None 默认禁用自动转义。
    • namespace ​(dict) -- 要添加到默认模板命名空间的字典,或无。
    • whitespace ​(str) -- 一个字符串,指定模板中空格的默认行为。以“.html”和“.js”结尾的文件默认为“single”,其他文件默认为“all”。

    在 4.3 版更改: 添加了​whitespace​参数。

    class tornado.template.Loader(root_directory: str, **kwargs)

    从单个根目录加载的模板加载器

    class tornado.template.DictLoader(dict: Dict[str, str], **kwargs)

    从字典加载的模板加载器

    exception tornado.template.ParseError(message: str, filename: Optional[str] = None, lineno: int = 0)

    针对模板语法错误引发。

    ParseError实例具有指示错误位置的 ​filename和 ​lineno属性。

    tornado.template.filter_whitespace(mode: str, text: str) → str

    根据模式转换文本中的空格。

    可用模式有:

    • all​:返回所有未修改的空格。
    • single​:用单个空格字符折叠连续的空格,保留换行符。
    • oneline​:将所有运行的空格折叠成一个空格字符,删除进程中的所有换行符。

    文章标题:创新互联Tornado教程:Tornado灵活的输出生成
    网址分享:http://www.zyruijie.cn/qtweb/news0/12400.html

    网站建设、网络推广公司-创新互联,是专注品牌与效果的网站制作,网络营销seo公司;服务项目有等

    广告

    声明:本网站发布的内容(图片、视频和文字)以用户投稿、用户转载内容为主,如果涉及侵权请尽快告知,我们将会在第一时间删除。文章观点不代表本网站立场,如需处理请联系客服。电话:028-86922220;邮箱:631063699@qq.com。内容未经允许不得转载,或转载时需注明来源: 创新互联