Flask默认使用了jinja模板语言,jinja的设计文档在这里
jinja提供了一些方便的函数调用,例如常见的for、if…else。
例如:
<ul id="navigation">
{% for item in navigation %}
<li><a href="{{ item.href }}">{{ item.caption }}</a></li>
{% endfor %}
</ul>
if语句可以测试 一个变量是否未定义,为空或 false。
一般的语法是
<do something> if <something is true> else <do something else>
其中else 部分是可选的,也可以用 elif 和 else 来构建多个分支
{% if kenny.sick %}
Kenny is sick.
{% elif kenny.dead %}
You killed Kenny! You bastard!!!
{% else %}
Kenny looks okay --- so far
{% endif %}
官方文档给出的if用作内联表达式的例子很有用,
{% extends layout_template if layout_template is defined else 'master.html' %}
这在一个变量定义的情况下才继承一个模板,否则继承默认的布局模板。例如登录前和登录后继承不同的模板,就可以这样实现。
还可以这样用:
{{ '[%s]' % page.title if page.title }}
这里没有显式地提供 else 块,会求值一个未定义对象
还可以用作循环过滤:
{% for user in users if not user.hidden %}
<li>{{ user.username|e }}</li>
{% endfor %}
另一个很有用的是过滤器,实际上也就是对变量进行操作的函数。
过滤器与变量用管道符号( | )分割,并且也 可以用圆括号传递可选参数。多个过滤器可以链式调用,前一个过滤器的输出会被作为 后一个过滤器的输入。
例如:
{{ name|striptags|title }}
这句实际上会移除 name 中的所有 HTML 标签并且改写为标题样式的大小写格式,具体是由两个内置过滤器striptags和title实现的。可以在这里查看所有的内置过滤器。
除了过滤器,还可以使用测试,用is
来测试变量或表达式,例如name is defined
用来测试name是否被定义过。内置的测试清单在这里