博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Jinja2条件控制
阅读量:4189 次
发布时间:2019-05-26

本文共 4451 字,大约阅读时间需要 14 分钟。

目录


描述

        Jinja2模板中的条件控制语句(if,elif,else)可以控制前端逻辑显示。

 

Jinja2条件控制语法

        Jinja2的条件控制与Python类似,但还是有一些不同:

{% if condition %}    html code...{% elif condition %}    html code...{% else %}    html code...{% endif %}

 其中elif和else可选,也可以出现elif任意次,这与Python用法相同。

条件表达式中可以使用not、and、or等关键字。

每个条件控制语句块结束后都要另起一行加上 {% endif %},否则服务器会报错500。

 

条件控制True/False场景

在Jinja2条件控制结构中,以下情况条件表达式结果为False:

  1. 条件表达式的值为False;
  2. 条件表达式的值为None;
  3. 条件表达式的值为空字符串;
  4. 条件表达式的值为数字0(整型0或浮点数0)
  5. 条件表达式的值为空列表;
  6. 条件表达式的值为空字典。

 

使用示例

1. 条件表达式的值是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()

运行结果:

 

2. 条件表达式的值是None

html代码同上。

Python脚本:

import flaskapp = flask.Flask(__name__)@ app.route("/")def index():    return flask.render_template("demo.html")if __name__ == '__main__':    app.run()

运行结果:

3. 条件表达式的值为字符串

传入两个字符串,其中一个字符串为空串""。

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。

 

4. 条件表达式的值是数值型

传入两个数值,一个为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。

 

5. 条件表达式的值是列表

传入一个非空列表:

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。

 

6. 条件表达式的值是元组

传入一个空元组。

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。

 

7. 条件表达式的值是集合

传入一个非空集合:

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。

 

8. 条件表达式的值是字典

传入一个非空字典:

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、空字典 {}

注意事项

1、HTML代码中不能包含Jinja2条件判断的注释(这应该算是Jinja2的一个bug)

如果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/

你可能感兴趣的文章
二叉树中和为某一值的路径
查看>>
数字在排序数组中出现的次数
查看>>
两个链表的第一个公共结点
查看>>
二叉树的深度
查看>>
MySQL数据库入门(三)
查看>>
MySQL数据库入门(四)
查看>>
关于方法覆盖和属性覆盖的问题?
查看>>
JAVA中ListIterator和Iterator详解
查看>>
目标和
查看>>
跳跃游戏
查看>>
买卖股票的最佳时机 II
查看>>
分发饼干
查看>>
最低票价
查看>>
删列造序
查看>>
使括号有效的最少添加
查看>>
令牌放置
查看>>
回溯法思想
查看>>
子集和问题
查看>>
旅行售货员问题
查看>>
区域和检索 - 数组不可变
查看>>