tornado.template ——灵活发电¶
将模板编译为Python代码的简单模板系统。
基本用法如下:
t = template.Template("<html>{{ myvalue }}</html>")
print(t.generate(myvalue="XXX"))
Loader 是从根目录加载模板并缓存已编译模板的类:
loader = template.Loader("/home/btaylor")
print(loader.load("test.html").generate(myvalue="XXX"))
我们将所有模板编译为原始的python。错误报告当前为…呃,很有趣。模板语法:
### base.html
<html>
<head>
<title>{% block title %}Default title{% end %}</title>
</head>
<body>
<ul>
{% for student in students %}
{% block student %}
<li>{{ escape(student.name) }}</li>
{% end %}
{% end %}
</ul>
</body>
</html>
### bold.html
{% extends "base.html" %}
{% block title %}A bolder title{% end %}
{% block student %}
<li><span style="bold">{{ escape(student.name) }}</span></li>
{% end %}
与大多数其他模板系统不同,我们不会对可以包含在语句中的表达式设置任何限制。 if 和 for 块被精确地转换为python,因此可以执行以下复杂表达式:
{% for student in [p for p in people if p.student and p.age > 23] %}
<li>{{ escape(student.name) }}</li>
{% 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 手动实例,但使用 render 和 render_string 方法 tornado.web.RequestHandler ,它根据 template_path Application 设置。
变量名以开头 _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 %}}. 父模板中的块将替换为子模板中相同命名块的内容。::<!-- base.html --> <title>{% block title %}Default title{% end %}</title> <!-- mypage.html --> {% extends "base.html" %} {% block title %}My page title{% end %}{% comment ... %}将从模板输出中删除的注释。注意没有
{{% end %}}标签;注释来自单词comment闭幕%}}标签。{% extends *filename* %}从其他模板继承。使用的模板
extends应该包含一个或多个block标记以替换父模板中的内容。子模板中未包含的任何内容block标记将被忽略。例如,请参见{{% block %}}标签。{% for *var* in *expr* %}...{% end %}和 Python 一样
for语句。{{% break %}}和{{% continue %}}可以在循环内使用。{% from *x* import *y* %}和 Python 一样
import语句。{% if *condition* %}...{% elif *condition* %}...{% else %}...{% end %}条件语句-输出条件为真的第一个部分。(The
elif和else节是可选的){% import *module* %}和 Python 一样
import语句。{% include *filename* %}包括另一个模板文件。包含的文件可以看到所有局部变量,就好像它被直接复制到
include指令(指令){{% autoescape %}}指令是一个例外)。交替地,{{% module Template(filename, **kwargs) %}}可以用于包含具有独立命名空间的另一个模板。{% module *expr* %}呈现出一个
UIModule. 的输出UIModule未转义::{% module Template("foo.html", arg=42) %}
UIModules是tornado.web.RequestHandler类(尤其是render方法),当模板系统在其他环境中单独使用时将不起作用。{% raw *expr* %}在不自动转义的情况下输出给定表达式的结果。
{% set *x* = *y* %}设置局部变量。
{% try %}...{% except %}...{% else %}...{% finally %}...{% end %}和 Python 一样
try语句。{% while *condition* %}... {% end %}和 Python 一样
while语句。{{% break %}}和{{% continue %}}可以在循环内使用。{% whitespace *mode* %}为当前文件的其余部分(或直到下一个)设置空白模式
{{% whitespace %}}指令)。见filter_whitespace有关可用选项。新 Tornado 4.3。
类引用¶
- class tornado.template.Template(template_string, name='<string>', loader=None, compress_whitespace=None, autoescape='xhtml_escape', whitespace=None)[源代码]¶
已编译的模板。
我们从给定的模板字符串编译成python。您可以使用generate()从变量生成模板。
构建模板。
- 参数
template_string (str) -- 模板文件的内容。
name (str) -- 从中加载模板的文件名(用于错误消息)。
loader (tornado.template.BaseLoader) -- 这个
BaseLoader负责此模板,用于解决{{% include %}}和{{% extend %}}指令。compress_whitespace (bool) -- 自Tornado 4.3以来已弃用。相当于
whitespace="single"如果是真的whitespace="all"如果是假的。autoescape (str) -- 模板命名空间中函数的名称,或
None默认情况下禁用转义。whitespace (str) -- 指定空白处理方式的字符串;请参阅
filter_whitespace供选择。
在 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) -- 要添加到默认模板命名空间的字典,或
None.whitespace (str) -- 指定模板中空白的默认行为的字符串;请参见
filter_whitespace供选择。对于以“.html”和“.js”结尾的文件,默认值为“single”;对于其他文件,默认值为“all”。
在 4.3 版更改: 补充
whitespace参数。