jinja是组成Flask的模板引擎,先写一个demo吧
{% block body %}
<ul>
{% for user in users %}
<li><a href="{{ user.url }}">{{ user.username }}</a></li>
{% endfor %}
</ul>
{% endblock %}
jinja的速度和Mako差不多,但比Genshi以及Django的模板引擎快10~20倍。
1.在jinja2中for循环内置常量
loop.index | 当前迭代的索引(从1开始) |
loop.index0 | 当前迭代的索引(从0开始) |
loop.first | 是否是第一次迭代,返回True\/False |
loop.last | 是否是最后一次迭代,返回True\/False |
loop.length | 序列的长度 |
注意:不可以使用continue和break表达死来控制循环的执行。
2.运算符
-
+
号运算符:可以完成数字相加,字符串相加,列表相加。但是并不推荐使用+
运算符来操作字符串,字符串相加应该使用~
运算符。 -
-
号运算符:只能针对两个数字相减。 -
/
号运算符:对两个数进行相除。 -
%
号运算符:取余运算。 -
*
号运算符:乘号运算符,并且可以对字符进行相乘。 -
**
号运算符:次幂运算符,比如2**3=8。 -
in
操作符:跟python中的in
一样使用,比如{{1 in [1,2,3]}}
返回true
。 -
~
号运算符:拼接多个字符串,比如{{"Hello" ~ "World"}}
将返回HelloWorld
。
Jinja2模块最重要的部分----宏
宏相当于一个搭建好的页面一部分,可以被引入,可以往宏传递参数。可以将一些经常用到的代码片段放到宏中,然后把一些不固定的值抽取出来当成一个变量,在使用宏时传递参数,从而将宏渲染成为页面的一部分。
比如:定义一个input标签宏:
{% macro input(name, value='', type='text') %}
<input type="{{ type }}" name="{{ name }}" value="{{
value|e }}">
{% endmacro %} 在其它地方使用这个宏快速创建出符合要求的input标签:
<p>{{ input('username') }}</p>
<p>{{ input('password', type='password') }}</p> 还有模板的继承以及过滤器等等~~