Jinja2是Python下一个被广泛应用的模版引擎,他的设计思想来源于Django的模板引擎,并扩展了其语法和一系列强大的功能。
1.1 手动传入的变量:
1.2 全局变量:
可用的全局变量:config
、request
、session
、g
、通过上下文管理器注册到全局变量…
1.3 过滤器:
过滤器名
说明
safe
渲染值时不转义
capitalize
把值的首字母转换成大写,其他字母转换成小写
lower
把值转换成小写形式
upper
把值转换成大写形式
title
把值中每个单词的首字母都转换成大写
trim
把值的首尾空格删掉
striptags
渲染之前把值中所有的 HTML 标签都删掉
使用语法:{{ var|safe }}
过滤器可以嵌套使用
可以自定义过滤器
2.1 条件判断
{% if user="张三" %}
Hello, {{ user }}!
{% elif user="李四"%}
Hello, 李四!
{% else %}
Hello, Stranger!
{% endif %}
判断条件兼容python语法的条件判断,另外还有Jinjia模板内置判断条件:
判断条件
说明
实例
defined/undefined
环境中是否有此变量的定义
if var is defined
none
变量是否为none
if var is none
number/string
数字、字符判断
…
even/odd
奇偶判断
…
upper/lower
大小写判断
…
2.2 循环
Jinjia模板的循环语法如下,但原生不支持break和continue语句,可通过扩展实现app.jinjia_env.add_extension('jinjia2.ext.loopcontrols')
<ul>
{% for comment in comments %}
<li>{{ comment }}</li>
{% else %}
<li>如果循环体为空则显示这里(可选)</li>
{% endfor %}
</ul>
Jinjia模板中循环体内的内置函数:
变量
描述
loop.index
当前循环迭代的次数(从1开始)
loop.index0
当前循环迭代的次数(从0开始)
loop.revindex
到循环结束需要迭代的次数(从1开始)
loop.revindex0
到循环结束需要迭代的次数(从0开始)
loop.first
若是第一次迭代,则返回True
loop.last
若是最后一次迭代,则返回True
loop.length
当前循环的总长度
loop.cycle(a,b,c)
循环的从指定序列中取值
3.1 模板宏
定义单独的宏文件(macro.html)
{% macro render_comment(comment) %}
<li>{{ comment }}</li>
{% endmacro %}
导入使用:
{% import 'macros.html' as macros %}
<ul>
{% for comment in comments %}
{{ macros.render_comment(comment) }}
{% endfor %}
</ul>
3.2 模板包含
需要在多处重复使用的模板代码片段可以写入单独的文件,再引入所有模板中,以避免重复。
{% include 'common.html' %}
{% include 'common.html' ignore missing %} #如果模板不存在,不会报错
{% include 'common.html' with/without context %} #是否携带当前页面的上下文
3.3 模板继承
Jinja2 使用 block
和 endblock
指令在基模板中定义内容区块。
语法:{% extends "base.html" %}
同名区块直接覆盖
同名区块可使用super()扩展
{% extends "base.html" %}
{% block title %}Index{% endblock %}
{% block head %}
{{ super() }}
{% endblock %}
{% block body %}
{% endblock %}
函数
说明
url_for()
构建URL
get_flashed_messages()
获取闪现消息
range()
同python中的range函数
dict()
同python中的dict函数
cycler(* items)
常用于CSS类名的循环
5.1 模板注释:
模板注释的语法:{{# ... #}}
,模板注释不会出现在HTML文档中,HTML注释会。
5.2 除HTML文档中多余的空白:
在模板标签的开始或结束添加一个 -
{%- for comment in comments %}
<li>{{ comment }}</li>
{% endfor -%}
5.3 使用变量:
设置变量:{{% set a,b=(1,2) %}}
使用with实现变量的块级作用域:
{{% with %}}
{{% set a,b=(1,2) %}}
...只在区块内有效
{{% endwith %}}
手机扫一扫
移动阅读更方便
你可能感兴趣的文章