当前位置:   article > 正文

Flask中Jinja2模板控制语句_jinja2 {%-杠

jinja2 {%-杠

        Jinja2模板中所有控制语句都放在{% ... %}中,并且以{% endxxx %}来进行结束,Jinja中常用的控制语句有if/for..in..。

1、流程控制-选择结构if

if:if语句和python中的类似,可以使用>,<,<=,>=,==,!=来进行判断,也可以通过and,or,not,()来进行逻辑合并操作。

注意
if 条件判断语句必须放在 {% if statement %} 中间,并且还必须有结束的标签 {% endif %} 。

示例代码1:

main.py

  1. from flask import Flask, render_template
  2. app = Flask(__name__)
  3. @app.route('/')
  4. def index():
  5. content = {
  6. "names": {"name": 'dgw'},
  7. "age": 25,
  8. "sex": '男'
  9. }
  10. return render_template('index.html', **content)
  11. if __name__ == '__main__':
  12. app.run()

index.html

  1. <!DOCTYPE html>
  2. <html lang="en">
  3. <head>
  4. <meta charset="UTF-8">
  5. <title>首页</title>
  6. </head>
  7. <body>
  8. 欢迎来到首页!
  9. <div>
  10. {% if age > 25 %}
  11. 您已经超过25岁了!
  12. {% elif age < 25 %}
  13. 您的年龄小于25岁!
  14. {% else %}
  15. 您的年龄今年25岁了!
  16. {% endif %}
  17. </div>
  18. </body>
  19. </html>

运行结果:

示例代码2:

main.py

  1. from flask import Flask, render_template, request
  2. app = Flask(__name__)
  3. @app.route('/')
  4. def index():
  5. return render_template('index.html')
  6. @app.route('/login')
  7. def login():
  8. user = request.args.get('user')
  9. return render_template('index.html', user=user)
  10. if __name__ == '__main__':
  11. app.run(debug=True)

index.html

  1. <!DOCTYPE html>
  2. <html lang="en">
  3. <head>
  4. <meta charset="UTF-8">
  5. <meta http-equiv="X-UA-Compatible" content="IE=edge">
  6. <meta name="viewport" content="width=device-width, initial-scale=1.0">
  7. <title>首页</title>
  8. </head>
  9. <body>
  10. <span>中国大陆</span>&nbsp;&nbsp;&nbsp;
  11. {% if not user %}
  12. <a href="{{url_for('login',user='dgw')}}">亲,请登录</a>&nbsp;&nbsp;&nbsp;
  13. <span>免费注册</span>&nbsp;&nbsp;&nbsp;
  14. {% else %}
  15. <span> {{user}} </span>
  16. {% endif %}
  17. <span>手机逛淘</span>
  18. </body>
  19. </html>

运行结果:

2、流程控制-循环语句:for...in...

for...in...:for循环可以遍历任何一个序列,包括列表、字典、元组。并且可以进行反向遍历。

2.1 列表遍历

main.py

  1. from flask import Flask, render_template
  2. app = Flask(__name__)
  3. @app.route('/')
  4. def index():
  5. name_list = ['张三', '李四', '王五']
  6. return render_template('index.html', name_list=name_list)
  7. if __name__ == '__main__':
  8. app.run()

index.html

  1. <!DOCTYPE html>
  2. <html lang="en">
  3. <head>
  4. <meta charset="UTF-8">
  5. <title>首页</title>
  6. </head>
  7. <body>
  8. 欢迎来到首页!
  9. <ul>
  10. {% for name in name_list %}
  11. <li>{{ name }}</li>
  12. {% endfor %}
  13. </ul>
  14. </body>
  15. </html>

运行结果:

2.2 字典遍历

main.py

  1. from flask import Flask, render_template
  2. app = Flask(__name__)
  3. @app.route('/')
  4. def index():
  5. name_dict = {
  6. 'name1': '张三',
  7. 'name2': '李四',
  8. 'name3': '王五'
  9. }
  10. return render_template('index.html', name_dict=name_dict)
  11. if __name__ == '__main__':
  12. app.run()

index.html

  1. <!DOCTYPE html>
  2. <html lang="en">
  3. <head>
  4. <meta charset="UTF-8">
  5. <title>首页</title>
  6. </head>
  7. <body>
  8. 欢迎来到首页!
  9. <ul>
  10. {% for key, value in name_dict.items() %}
  11. <li>{{ key }}:{{ value }}</li>
  12. {% endfor %}
  13. </ul>
  14. </body>
  15. </html>

运行结果:

2.3 序列中没有值时进入else中

main.py

  1. from flask import Flask, render_template
  2. app = Flask(__name__)
  3. @app.route('/')
  4. def index():
  5. name_dict = {
  6. }
  7. return render_template('index.html', name_dict=name_dict)
  8. if __name__ == '__main__':
  9. app.run()

index.html

  1. <!DOCTYPE html>
  2. <html lang="en">
  3. <head>
  4. <meta charset="UTF-8">
  5. <title>首页</title>
  6. </head>
  7. <body>
  8. 欢迎来到首页!
  9. <ul>
  10. {% for key, value in name_dict.items() %}
  11. <li>{{ key }}:{{ value }}</li>
  12. {% else %}
  13. <li>Not found!</li>
  14. {% endfor %}
  15. </ul>
  16. </body>
  17. </html>

运行结果:

2.4 反向遍历用过滤器 reverse

示例代码:

main.py

  1. from flask import Flask, render_template
  2. app = Flask(__name__)
  3. @app.route('/')
  4. def index():
  5. name_dict = {
  6. 'name1': '张三',
  7. 'name2': '李四',
  8. 'name3': '王五'
  9. }
  10. return render_template('index.html', name_dict=name_dict)
  11. if __name__ == '__main__':
  12. app.run()

index.html

  1. <!DOCTYPE html>
  2. <html lang="en">
  3. <head>
  4. <meta charset="UTF-8">
  5. <title>首页</title>
  6. </head>
  7. <body>
  8. 欢迎来到首页!
  9. <ul>
  10. {% for key, value in name_dict.items() | reverse %}
  11. <li>{{ key }}:{{ value }}</li>
  12. {% else %}
  13. <li>Not found!</li>
  14. {% endfor %}
  15. </ul>
  16. </body>
  17. </html>

运行结果: 【注意:显示结果和2.2相比已经发生变化】

2.5 补充

        Jinja中的for循环还包含以下变量,可以用来获取当前的遍历状态:

变量描述
loop.index当前迭代的索引(从1开始)
loop.index0当前迭代的索引(从0开始)
loop.first是否是第一次迭代,返回True或False
loop.last是否是最后一次迭代,返回True或False
loop.length序列的长度

注意:不可以使用continue和break表达式来控制循环的执行。

        在 jinja2 中的 for 循环,跟 python 中的 for 循环基本上是一模一样的也是 for...in... 的形式。并且也可以遍历所有的序列以及迭代器唯一不同的是, jinja2 中的 for 循环没有 break 和 continue 语句。

2.6 乘法表练习

示例代码:

index.html

  1. <!DOCTYPE html>
  2. <html lang="en">
  3. <head>
  4. <meta charset="UTF-8">
  5. <meta http-equiv="X-UA-Compatible" content="IE=edge">
  6. <meta name="viewport" content="width=device-width, initial-scale=1.0">
  7. <title>循环练习</title>
  8. </head>
  9. <body>
  10. <h1>循环练习-99乘法表</h1>
  11. <table border="1">
  12. {% for x in range(1,10)%}
  13. <tr>
  14. {% for y in range(1,x+1)%}
  15. <td>{{y}} * {{x}} = {{x*y}}</td>
  16. {% endfor %}
  17. </tr>
  18. {% endfor %}
  19. </table>
  20. </body>
  21. </html>

运行结果:

3、测试器(判断值类型)

        测试器主要用来判断一个值是否满足某种类型,一般通过普通的if判断。语法是:if...is...

示例代码:

main.py

  1. from flask import Flask, render_template
  2. app = Flask(__name__)
  3. @app.route('/')
  4. def index():
  5. name_dict = {
  6. "name": "dgw"
  7. }
  8. num = 6
  9. return render_template('index.html', name_dict=name_dict, num=num)
  10. if __name__ == '__main__':
  11. app.run()

index.html

  1. <!DOCTYPE html>
  2. <html lang="en">
  3. <head>
  4. <meta charset="UTF-8">
  5. <title>首页</title>
  6. </head>
  7. <body>
  8. 欢迎来到首页!
  9. <div>
  10. {% if name_dict is string %}
  11. String value is : {{ name_dict }}
  12. {% else %}
  13. The value is not a string!
  14. {% endif %}
  15. </div>
  16. <div>
  17. {% if num is even %}
  18. num value is : {{ num }}
  19. {% else %}
  20. The value is not a even!
  21. {% endif %}
  22. </div>
  23. </body>
  24. </html>

运行结果:

其它常见的Jinja2测试器如下表所示:

测试器说明
callable(object)是否可调用
defined(object)是否已经被定义了。
escaped(object)是否已经被转义了。
upper(object)是否全是大写。
lower(object)是否全是小写。
string(object)是否是一个字符串。
sequence(object)是否是一个序列。
number(object)是否是一个数字。
odd(object)是否是奇数。
even(object)是否是偶数。
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/盐析白兔/article/detail/191375
推荐阅读
相关标签
  

闽ICP备14008679号