Jinja模板使用

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。
一般的语法是
if 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是否被定义过。内置的测试清单在这里

你可能感兴趣的:(Flask)