Flask开发(五)Jinja2模板 流程控制语句
内容纲要
本篇导读:
- 流程控制之if语句
- 流程控制之for语句
if语句
在Jinja2模板引擎中也可以使用if和for来控制模板的渲染方向,模板引擎中。if和for语句都应该放到{% %}当中。在前端的Jinja2语法中,if可以进行判断:是否存在参数,存在的参数是否符合条件,其基本语法如下:
{% if condition %} <!-- condition指的是条件 --> {% else %} <!-- 条件不满足时 --> {% endif %} <!-- 结束if语句 -->
在templates文件夹下创建index.html。
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Title</title> </head> <body> {% if name %} <h1>产生的随机数有效!</h1> {% else %} <h1 style="color: red">产生的随机数无效!</h1> {% endif %} </body> </html>
修改app.py如下:
from flask import Flask,render_template import random app = Flask(__name__) @app.route('/') def hello_world(): rand=random.randint(0,1) return render_template('index.html',name=rand) if __name__ == '__main__': app.run(debug=True)
在app.py中的hello_world函数中,使用random产生一个0到1的随机数传入模板,在模板中判断如果这个数是1,则显示“产生的随机数数有效”,否则显示“产生的随机数无效”,运行本程序,多刷新几次,可以看到如下结果:
再看以下示例:
将index.html中的代码修改如下:
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Title</title> </head> <body> {% if name == 1 %} <h1 style="color: red">恭喜,抽得一等奖!!!</h1> {% elif name == 2 %} <h1 style="color: blue">恭喜,抽得二等奖!!!</h1> {% else %} <h1 style="color: green">恭喜,抽得三等奖!!!</h1> {% endif %} </body> </html>
将app.py修改成以下代码:
from flask import Flask,render_template import random app = Flask(__name__) @app.route('/') def hello_world(): rand=random.randint(1,3) return render_template('index.html',name=rand) if __name__ == '__main__': app.run(debug=True)
运行程序,访问http://127.0.0.1:5000/ ,刷新几次页面,会看到不同语句页面。
在模板中,尽量少使用多层嵌套的if...else...语句,往往会因为缩进出现这样或者那样的问题。尽量使用if...elif...else的结构。
for语句
模板中的for循环语句的定义如下:
{% for 目标 in对象 %} <p>目标</p> {% endfor %}
Jinja2中for循环内置常量:
- loop.index 当前迭代的索引(从1开始)
- loop.index0 当前迭代的索引(从0开始)
- loop.first 是否是第一次迭代,返回True或False
- loop.last 是否是最后一次迭代,返回True或False
- loop.length 返回序列的长度
下面用视图函数定义一个字典goods,在模板中使用for循环渲染输出。
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Title</title> <style type="text/css"> th,td{ border: 1px solid black; } </style> </head> <body> <table> <thead> <th>商品名称</th> <th>商品价格</th> </thead> <tbody> <meta charset="UTF-8"> {% for good in goods %} <tr> <td>{{ good.name }}</td> <td>{{ good.price }}</td> </tr> {% endfor %} </tbody> </table> </body> </html>
上面代码实现了一个静态页面,代码中定义了一个表格,表格分为5行两列进行显示,其中,第一行用来显示表格“商品名称”及“商品价格”等内容。
app.py中的内容如下:
from flask import Flask,render_template import random app = Flask(__name__) @app.route('/')#定义路由 def hello_world():#定义视图函数 goods = [{'name': '怪味少女开衫外套春秋韩版学生bf原宿宽松运动风2018新款秋装上衣', 'price': 138.00}, {'name': 'A7seven 复古百搭牛仔外套女秋季2018新款宽松显瘦休闲夹克衫上衣', 'price': 100.00}, {'name': '黑色时尚西装外套女春秋中长款2018新款韩版休闲薄款chic西服上衣', 'price': 100.00}, {'name': 'HAVE RICE饭馆 颜值超耐打 复古牛仔外套女短款 2018春秋新款上衣', 'price': 129.00} ]#定义列表goods return render_template('shop.html', **locals())#渲染模板,并向模板传递参数 if __name__ == '__main__': app.run(debug=True)
在hello_world视图函数中定义了一个字典goods,其属性有name和price,用for循环将其遍历出来,运行程序,访问http://127.0.0.1:5000,结果如下:
经过本篇的学习可以看出,通过{% 逻辑表达式 %}可以实现代码的嵌套,其语法与Python语法基本一致,但是必须包含在{% %}内部。
阅读剩余
版权声明:
作者:雪落长安
链接:https://blog.wlbc321.cn/index.php/2021/05/17/flask5/
文章版权归作者所有,未经允许请勿转载。
THE END