简介
在模板中使用的控制结构,主要有 if
、 for
。下面会详细讲解使用方法。
if控制结构的使用
if 的使用语法规则:
# 模板中的if控制结构
{% if 条件 %}
符合条件执行的html代码
{% endif %} # 必须要有,作为结束
当然在模板中也是支持 if---else 结构的。
使用也是一样
# {% if 条件 %}
# 中间写为True执行的代码
# {% else %}
# 中间写为False执行的代码
# {% endif %}
其实,在模板中使用控制结构就同在python中是基本相同的,不过是加了 {% %} 框起来了而已, 这是jinja2中设置好的规则。
{% %}是Jinja2中的控制语句,{{ }}是Jinja2中的变量,{# #}是注释。
案例理解:
flask程序中:
from flask import Flask, render_template
app = Flask(__name__)
#@app.route('/page')
#def index(name):
# 定义一个变量在模板中使用
# uname = '披甲龙龟'
# return render_template('Process-control-if.html', test_data=locals())
@app.route('/page/<name>')
def page_name(name):
# uname = '披甲龙龟'
str_name = name
return render_template('Process-control-if.html', test_data=locals())
@app.route('/info')
def info():
return '<img src="https://p1.ssl.qhimg.com/t014ee57f018c046471.jpg">'
if __name__ == '__main__':
app.run(debug=True)
模板文件中:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<style>
.test1 {
color: #f60;
text-aline:center;
}
</style>
<body>
{% if test_data.uname %}
<h1 class="test1">Hello ~ {{test_data.uname}}</h1>
{% endif %}
<!-- 在这里意思是如果uname存在,会执行Hello ~ uname的值,否则什么都不执行 对应index视图-->
{% if test_data.uname %}
<h1 class="test1">Hello ~ {{test_data.uname}}</h1>
{% else %}
<h1 class="test1">Hello World ~ {{test_data.name}}🤭
{% endif %}
<!-- 同上面相同,如果不存在时会执行Hello World ~ <name>地址栏输入的值 对应page_name视图-->
<!--这里讲url_for在模板中反向解析的用法-->
{% if test_data.uname %}
<h2><a href="{{url_for('info')}}">关于我</a></h2>
{% endif %}
</body>
</html>
这里就不运行给大家看了。
for控制结构的使用
for的使用语法规则:
# 模板中的for控制结构
{% for 变量 in 可迭代对象(list/tuple/dict/set/str...) %}
# 中间写循环体(html代码或动态变量)
{% endfor %} # 作为结束,必须有
for语句在模板中的使用很广泛,遍历,循环,通常需要传递多个变量时,会在视图函数中封装成字典、列表、元组等类型数据,这样我们只需要传递一个可迭代的变量再通过模板的for控制结构遍历出数据就实现多个数据的传递。
案例理解:
flask程序中:
from random import choice
from flask import Flask, render_template
app = Flask(__name__)
@app.route('/page')
def index():
uname = '披甲龙龟'
# 随机 abcd
lis = ['A', 'B', 'C', 'D']
random_word = [choice(lis) for _ in range(10)]
# 用模板的for来遍历该字典
dicts_data = {
'疾风剑豪': '亚索',
'暗裔剑魔': '亚托克斯',
'无双剑姬': '菲奥娜',
'无极剑圣': '易',
}
return render_template('Process-control-for.html', test_data=locals())
if __name__ == '__main__':
app.run(debug=True)
模板文件中:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
{% if True%}
<h1 class="test1">Hello ~ {{test_data.uname}}</h1>
{% endif %}
<!--模板中使用 for 循环结构-->
<!--list-->
<ul>
{% for li in test_data.random_word %}
<li><h2>{{li}}</h2></li>
{% endfor %}
</ul>
<!--dict-->
<div>
{% for k,v in test_data.dicts_data.items() %}
<p>{{k}}:{{v}}</p>
{% endfor %}
</div>
</body>
</html>
运行结果:
评论 (0)