过滤器变量可以通过 过滤器 修改。过滤器与变量用管道符号( 例如 下面的 内置过滤器清单 节介绍了所有的内置过滤器。 测试除了过滤器,所谓的“测试”也是可用的。测试可以用于对照普通表达式测试一个变量。 要测试一个变量或表达式,你要在变量后加上一个 is 以及测试的名称。例如,要得出 一个值是否定义过,你可以用 测试也可以接受参数。如果测试只接受一个参数,你可以省去括号来分组它们。例如, 下面的两个表达式做同样的事情: {% if loop.index is divisibleby 3 %}
{% if loop.index is divisibleby(3) %}
下面的 内置测试清单 章节介绍了所有的内置测试。 注释要把模板中一行的部分注释掉,默认使用 {# note: disabled template because we no longer use this
{% for user in users %}
...
{% endfor %}
#}
空白控制默认配置中,模板引擎不会对空白做进一步修改,所以每个空白(空格、制表符、换行符 等等)都会原封不动返回。如果应用配置了 Jinja 的 trim_blocks ,模板标签后的 第一个换行符会被自动移除(像 PHP 中一样)。 此外,你也可以手动剥离模板中的空白。当你在块(比如一个 for 标签、一段注释或变 量表达式)的开始或结束放置一个减号( {% for item in seq -%}
{{ item }}
{%- endfor %}
这会产出中间不带空白的所有元素。如果 seq 是 如果开启了 行语句 ,它们会自动去除行首的空白。 提示 标签和减号之间不能有空白。 有效的: {%- if foo -%}...{% endif %}
无效的: {% - if foo - %}...{% endif %}
转义有时想要或甚至必要让 Jinja 忽略部分,不会把它作为变量或块来处理。例如,如果 使用默认语法,你想在在使用把 最简单的方法是在变量分隔符中( {{ '{{' }}
对于较大的段落,标记一个块为 raw 是有意义的。例如展示 Jinja 语法的实例, 你可以在模板中用这个片段: {% raw %}
<ul>
{% for item in seq %}
<li>{{ item }}</li>
{% endfor %}
</ul>
{% endraw %}
行语句如果应用启用了行语句,就可以把一个行标记为一个语句。例如如果行语句前缀配置为 <ul>
# for item in seq
<li>{{ item }}</li>
# endfor
</ul>
<ul>
{% for item in seq %}
<li>{{ item }}</li>
{% endfor %}
</ul>
行语句前缀可以出现在一行的任意位置,只要它前面没有文本。为了语句有更好的可读 性,在块的开始(比如 for 、 if 、 elif 等等)以冒号结尾: # for item in seq:
...
# endfor
提示 若有未闭合的圆括号、花括号或方括号,行语句可以跨越多行: <ul>
# for href, caption in [('index.html', 'Index'),
('about.html', 'About')]:
<li><a href="{{ href }}">{{ caption }}</a></li>
# endfor
</ul>
从 Jinja 2.2 开始,行注释也可以使用了。例如如果配置 # for item in seq:
<li>{{ item }}</li> ## this comment is ignored
# endfor
模板继承Jinja 中最强大的部分就是模板继承。模板继承允许你构建一个包含你站点共同元素的基 本模板“骨架”,并定义子模板可以覆盖的 块 。 听起来复杂,实际上很简单。从例子上手是最易于理解的。 |
Archiver|手机版|笨鸟自学网 ( 粤ICP备20019910号 )
GMT+8, 2024-12-22 13:47 , Processed in 0.020519 second(s), 17 queries .