Jinja2条件控制

Jinja2条件控制Jinja2条件判断逻辑的介绍、使用方法和注意事项。

目录

描述

Jinja2条件控制语法

条件控制True/False场景

使用示例

1. 条件表达式的值是False

2. 条件表达式的值是None

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

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

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

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

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

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

总结

注意事项

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


描述

        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

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Jinja condition demo</title>
</head>
<body>
    {% if element %}
        <p>element value is true.</p>
    {% else %}
        <p>element value is false.</p>
    {% endif %}
</body>
</html>

Python脚本:

import flask

app = flask.Flask(__name__)

@ app.route("/")
def index():
    return flask.render_template("demo.html", element=False)

if __name__ == '__main__':
    app.run()

运行结果:

Jinja2条件控制

 

2. 条件表达式的值是None

html代码同上。

Python脚本:

import flask

app = flask.Flask(__name__)

@ app.route("/")
def index():
    return flask.render_template("demo.html")

if __name__ == '__main__':
    app.run()

运行结果:

Jinja2条件控制

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

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

HTML代码

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Jinja condition demo</title>
</head>
<body>
    {% if element1 %}
        <p>element1 value is {
  
  {element1 | upper}}.</p>
    {% else %}
        <p>element1 value is an empty string.</p>
    {% endif %}

    {% if element2 %}
        <p>element2 value is {
  
  {element2 | upper}}.</p>
    {% else %}
        <p>element2 value is an empty string.</p>
    {% endif %}
</body>
</html>

Python脚本:

import flask

app = flask.Flask(__name__)

@ app.route("/")
def index():
    return flask.render_template("demo.html", element1="", element2="Flask is fun.")

if __name__ == '__main__':
    app.run()

运行结果:

Jinja2条件控制

结论:

当字符串的值为空串时,Jinja2条件控制逻辑判定为False。

 

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

传入两个数值,一个为0,一个非0.

HTML代码:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Jinja condition demo</title>
</head>
<body>
    {% if value1 %}
    <p>value1 is <span>{
  
  {value1}}</span>!</p>
    {% else %}
        <p>value1 is zero.</p>
    {% endif %}

    {% if value2 %}
    <p>value2 is <span>{
  
  {value2}}</span>!</p>
    {% else %}
        <p>value2 is zero.</p>
    {% endif %}
</body>
</html>

Python脚本:

import flask

app = flask.Flask(__name__)

@ app.route("/")
def index():
    return flask.render_template("demo.html", value1=23, value2=0)

if __name__ == '__main__':
    app.run()

运行结果:

Jinja2条件控制

结论:

当传入的数值的值为0时,Jinja2条件控制逻辑判断为False。

补充:传入的数值不局限为整型。即使传入的数据为浮点型0.0,Jinja2依然判定为False。

 

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

传入一个非空列表:

HTML代码:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Jinja condition demo</title>
</head>
<body>
    {% if list %}
    <p>list value is: <span>{
  
  {list}}</span>!</p>
    {% else %}
        <p>It's an empty list.</p>
    {% endif %}
</body>
</html>

Python脚本:

import flask

app = flask.Flask(__name__)

@ app.route("/")
def index():
    return flask.render_template("demo.html", list=[23, "OpenStack"])

if __name__ == '__main__':
    app.run()

运行结果:

Jinja2条件控制

结论:

当传入的数据是列表时,Jinja2条件控制逻辑判定非空列表为True。

 

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

传入一个空元组。

HTML代码:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Jinja condition demo</title>
</head>
<body>
    {% if tuple %}
    <p>tuple value is: <span>{
  
  {tuple}}</span>!</p>
    {% else %}
        <p>It's an empty tuple.</p>
    {% endif %}
</body>
</html>

Python脚本:

import flask

app = flask.Flask(__name__)

@ app.route("/")
def index():
    return flask.render_template("demo.html", tuple=tuple())

if __name__ == '__main__':
    app.run()

运行结果:

Jinja2条件控制

结论:

当传入的数据是元组时,Jinja2条件控制逻辑判定空元组为False。

 

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

传入一个非空集合:

HTML代码:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Jinja condition demo</title>
</head>
<body>
    {% if set %}
    <p>set value is: <span>{
  
  {set}}</span>!</p>
    {% else %}
        <p>It's an empty set.</p>
    {% endif %}
</body>
</html>

Python脚本:

import flask

app = flask.Flask(__name__)

@ app.route("/")
def index():
    return flask.render_template("demo.html", set={"nova", "cinder", "neutron"})

if __name__ == '__main__':
    app.run()

运行结果:

Jinja2条件控制

结论:

当传入的数据是集合时,Jinja2条件控制逻辑判定非空集合为True。

 

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

传入一个非空字典:

HTML代码:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Jinja condition demo</title>
</head>
<body>
    {% if map %}
    <p>map value is: <span>{
  
  {map}}</span>!</p>
    {% else %}
        <p>It's an empty map.</p>
    {% endif %}
</body>
</html>

Python脚本:

import flask

app = flask.Flask(__name__)

@ app.route("/")
def index():
    return flask.render_template("demo.html", map={"country":"China"})

if __name__ == '__main__':
    app.run()

运行结果:

Jinja2条件控制

结论:

当传入的数据是字典时,Jinja2条件控制逻辑判定非空字典为True。

 

总结

Jinja2模板条件表达式判断为False的场景:

1、值为 False
2、值为 None
3、值为空字符串 ""
4、数值为 0(浮点数或整数)
5、空列表 []
6、空元组 ()
7、空集合 set()
8、空字典 {}

注意事项

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

如果HTML代码中包含了具有Jinja2条件判断的注释,服务器访问该接口时报错500。

下面来看具体代码:

HTML代码:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Jinja condition demo</title>
</head>
<body>
    {% if map %}
    <p>map value is: <span>{
  
  {map}}</span>!</p>
    {% else %}
        <p>It's an empty map.</p>
    {% endif %}

    <!--{% if map %}-->
</body>
</html>

注意14行有一处注释包含了Jinja2条件控制语句。

Python脚本:

import flask

app = 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 -

 

今天的文章Jinja2条件控制分享到此就结束了,感谢您的阅读。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
如需转载请保留出处:https://bianchenghao.cn/9863.html

(0)
编程小号编程小号

相关推荐

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注