Flask 代码
#!usr/bin/env python # -*- coding:utf-8 _*- """ # author: 小菠萝测试笔记 # blog: https://www.cnblogs.com/poloyy/ # time: 2021/7/11 6:04 下午 # file: 6_jinja2.py """ from flask import Flask, render_template app = Flask(__name__) users = ['tom', 'jerry', 'mike'] @app.route('/3') def index3(): return render_template('index3.html', users=users, iterable=users) app.run(debug=True)
浏览器的运行效果
能看到 # for 的写法并没有生效
if 语句
语法
jinja2 模板中,使用 {% 语句 %} 包围的语法块称为语句,jinja2 支持类似于 Python 的 if-else 判断语句,语法如下:
{% if cond %}
{% elif cond %}
{% else %}
{% endif %}
jinja2 模板代码
<html> {% if a %} <p>a is True</p> {% else %} <p>a is False</p> {% endif %} {% if b %} <p>b is True</p> {% elif c %} <p>b is False, and c is True</p> {% endif %} </html>
Flask 代码
#!usr/bin/env python # -*- coding:utf-8 _*- """ # author: 小菠萝测试笔记 # blog: https://www.cnblogs.com/poloyy/ # time: 2021/7/11 6:04 下午 # file: 6_jinja2.py """ from flask import Flask, render_template app = Flask(__name__) @app.route('/4') def index4(): a = False b = False c = True return render_template('index4.html', a=a, b=b, c=c) app.run(debug=True)
浏览器的运行效果
tests
语法
jinja2 提供的 tests 可以用来在语句里对变量或表达式进行测试,语法如下:
{% variable is test %}
完整的 test 请参考 https://jinja.palletsprojects.com/en/latest/templates/#builtin-tests,部分的 test 如下:
test 名称 | 功能 |
defined | 变量是否已经定义 |
boolean | 变量的类型是否是 boolean |
integer | 变量的类型是否是 integer |
float | 变量的类型是否是 float |
string | 变量是否是 string |
mapping | 变量的类型是否是字典 |
sequence | 变量的类型是否是序列 |
even | 变量是否是偶数 |
odd | 变量是否是奇数 |
lower | 变量是否是小写 |
upper | 变量是否是大写 |
jinja2 模板代码
<html> {% if number is odd %} <p> {{ number }} is odd {% else %} <p> {{ number }} is even {% endif %} {% if string is lower %} <p> {{ string }} is lower {% else %} <p> {{ string }} is upper {% endif %} </html>
jinja2 的模板输入
number = 404
string = 'HELLO'
渲染后的 html
<html>
<p> 404 is even
<p> HELLO is upper
</html>
过滤器
语法
jinja2 过滤器的是一个函数,语法如下:
{{ variable | filter }}
- 执行函数调用 filter(varialbe),把函数返回值作为这个代码块的值
- 暂时不举具体的栗子了,只做简单介绍,目测后面我会出详细文章讲解 jinja2
jinja2 模板
<html>
{{ string | upper }}
</html>
jinja2 的模板输入
string = 'hello'
渲染后的 html
<html>
HELLO
</html>