本文共 4451 字,大约阅读时间需要 14 分钟。
目录
Jinja2模板中的条件控制语句(if,elif,else)可以控制前端逻辑显示。
Jinja2的条件控制与Python类似,但还是有一些不同:
{% if condition %} html code...{% elif condition %} html code...{% else %} html code...{% endif %}
其中elif和else可选,也可以出现elif任意次,这与Python用法相同。
条件表达式中可以使用not、and、or等关键字。
每个条件控制语句块结束后都要另起一行加上 {% endif %},否则服务器会报错500。
在Jinja2条件控制结构中,以下情况条件表达式结果为False:
HTML代码 demo.html
Jinja condition demo {% if element %}element value is true.
{% else %}element value is false.
{% endif %}
Python脚本:
import flaskapp = flask.Flask(__name__)@ app.route("/")def index(): return flask.render_template("demo.html", element=False)if __name__ == '__main__': app.run()
运行结果:
html代码同上。
Python脚本:
import flaskapp = flask.Flask(__name__)@ app.route("/")def index(): return flask.render_template("demo.html")if __name__ == '__main__': app.run()
运行结果:
传入两个字符串,其中一个字符串为空串""。
HTML代码
Jinja condition demo {% if element1 %}element1 value is {
{element1 | upper}}. {% else %}element1 value is an empty string.
{% endif %} {% if element2 %}element2 value is {
{element2 | upper}}. {% else %}element2 value is an empty string.
{% endif %}
Python脚本:
import flaskapp = flask.Flask(__name__)@ app.route("/")def index(): return flask.render_template("demo.html", element1="", element2="Flask is fun.")if __name__ == '__main__': app.run()
运行结果:
结论:
当字符串的值为空串时,Jinja2条件控制逻辑判定为False。
传入两个数值,一个为0,一个非0.
HTML代码:
Jinja condition demo {% if value1 %}value1 is { {value1}}!
{% else %}value1 is zero.
{% endif %} {% if value2 %}value2 is { {value2}}!
{% else %}value2 is zero.
{% endif %}
Python脚本:
import flaskapp = flask.Flask(__name__)@ app.route("/")def index(): return flask.render_template("demo.html", value1=23, value2=0)if __name__ == '__main__': app.run()
运行结果:
结论:
当传入的数值的值为0时,Jinja2条件控制逻辑判断为False。
补充:传入的数值不局限为整型。即使传入的数据为浮点型0.0,Jinja2依然判定为False。
传入一个非空列表:
HTML代码:
Jinja condition demo {% if list %}list value is: { {list}}!
{% else %}It's an empty list.
{% endif %}
Python脚本:
import flaskapp = flask.Flask(__name__)@ app.route("/")def index(): return flask.render_template("demo.html", list=[23, "OpenStack"])if __name__ == '__main__': app.run()
运行结果:
结论:
当传入的数据是列表时,Jinja2条件控制逻辑判定非空列表为True。
传入一个空元组。
HTML代码:
Jinja condition demo {% if tuple %}tuple value is: { {tuple}}!
{% else %}It's an empty tuple.
{% endif %}
Python脚本:
import flaskapp = flask.Flask(__name__)@ app.route("/")def index(): return flask.render_template("demo.html", tuple=tuple())if __name__ == '__main__': app.run()
运行结果:
结论:
当传入的数据是元组时,Jinja2条件控制逻辑判定空元组为False。
传入一个非空集合:
HTML代码:
Jinja condition demo {% if set %}set value is: { {set}}!
{% else %}It's an empty set.
{% endif %}
Python脚本:
import flaskapp = flask.Flask(__name__)@ app.route("/")def index(): return flask.render_template("demo.html", set={"nova", "cinder", "neutron"})if __name__ == '__main__': app.run()
运行结果:
结论:
当传入的数据是集合时,Jinja2条件控制逻辑判定非空集合为True。
传入一个非空字典:
HTML代码:
Jinja condition demo {% if map %}map value is: { {map}}!
{% else %}It's an empty map.
{% endif %}
Python脚本:
import flaskapp = flask.Flask(__name__)@ app.route("/")def index(): return flask.render_template("demo.html", map={"country":"China"})if __name__ == '__main__': app.run()
运行结果:
结论:
当传入的数据是字典时,Jinja2条件控制逻辑判定非空字典为True。
Jinja2模板条件表达式判断为False的场景:
1、值为 False2、值为 None3、值为空字符串 ""4、数值为 0(浮点数或整数)5、空列表 []6、空元组 ()7、空集合 set()8、空字典 {}
如果HTML代码中包含了具有Jinja2条件判断的注释,服务器访问该接口时报错500。
下面来看具体代码:
HTML代码:
Jinja condition demo {% if map %}map value is: { {map}}!
{% else %}It's an empty map.
{% endif %}
注意14行有一处注释包含了Jinja2条件控制语句。
Python脚本:
import flaskapp = flask.Flask(__name__)@ app.route("/")def index(): return flask.render_template("demo.html", map={"country":"China"})if __name__ == '__main__': app.run()
运行Python脚本,访问该接口后,服务端报错500:
127.0.0.1 - - [07/Dec/2019 11:46:21] "GET / HTTP/1.1" 500 -
转载地址:http://mfsoi.baihongyu.com/