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
参数。