Jinja2 是一个现代的,设计者友好的,仿照 Django 模板的 Python 模板语言。 它速度快,被广泛使用,并且提供了可选的沙箱模板执行环境保证安全:
<title>{% block title %}{% endblock %}</title> <ul> {% for user in users %} <li><a href="{{ user.url }}">{{ user.username }}</a></li> {% endfor %} </ul>
特性:
沙箱中执行
强大的 HTML 自动转义系统保护系统免受 XSS
模板继承
及时编译最优的 python 代码
可选提前编译模板的时间
易于调试。异常的行数直接指向模板中的对应行。
可配置的语法
jinjia2内置过滤器
@ 字符串操作 {# 输出大写 #} <h1>hello {{ name|upper }}!</h1> {# 输出大写,超过3个字符打断,用'...'替代 #} <h1>hello {{ name|upper|truncate(3,True) }}</h1> {# 当变量未定义时,显示默认字符串,可以缩写为d #} {{ name | default('No name', true) }} {# 单词首字母大写 #} {{ 'hello' | capitalize }} {# 单词全小写 #} {{ 'XML' | lower }} {# 去除字符串前后的空白字符 #} {{ ' hello ' | trim }} {# 字符串反转,返回"olleh" #} {{ 'hello' | reverse }} {# 格式化输出,返回"Number is 2" #} {{ '%s is %d' | format("Number", 2) }} {# 关闭HTML自动转义 #} {{ '<em>name</em>' | safe }} {% autoescape false %} {# HTML转义,即使autoescape关了也转义,可以缩写为e #} {{ '<em>name</em>' | escape }} {% endautoescape %} @ 数值操作 {# 四舍五入取整,返回13.0 #} {{ 12.8888 | round }} {# 向下截取到小数点后2位,返回12.88 #} {{ 12.8888 | round(2, 'floor') }} {# 绝对值,返回12 #} {{ -12 | abs }} @ 列表操作 {# 取第一个元素 #} {{ [1,2,3,4,5] | first }} {# 取最后一个元素 #} {{ [1,2,3,4,5] | last }} {# 返回列表长度,可以写为count #} {{ [1,2,3,4,5] | length }} {# 列表求和 #} {{ [1,2,3,4,5] | sum }} {# 列表排序,默认为升序 #} {{ [3,2,1,5,4] | sort }} {# 合并为字符串,返回"1 | 2 | 3 | 4 | 5" #} {{ [1,2,3,4,5] | join(' | ') }} {# 列表中所有元素都全大写。这里可以用upper,lower,但capitalize无效 #} {{ ['tom','bob','ada'] | upper }} @ 字典操作 {% set users=[{'name':'Tom','gender':'M','age':20}, {'name':'John','gender':'M','age':18}, {'name':'Mary','gender':'F','age':24}, {'name':'Bob','gender':'M','age':31}, {'name':'Lisa','gender':'F','age':19}] %} {# 按指定字段排序,这里设reverse为true使其按降序排 #} <ul> {% for user in users | sort(attribute='age', reverse=true) %} <li>{{ user.name }}, {{ user.age }}</li> {% endfor %} </ul> {# 列表分组,每组是一个子列表,组名就是分组项的值 #} <ul> {% for group in users|groupby('gender') %} <li>{{ group.grouper }} <ul> {% for user in group.list %} <li>{{ user.name }}</li> {% endfor %}</ul> </li> {% endfor %} </ul> {# 取字典中的某一项组成列表,再将其连接起来 #} {{ users | map(attribute='name') | join(', ') }}
文章来源gogo闯,微信公众号:流量贩子