渲染模板:

在flask中渲染模板很简单!!!

首先导入render_template模块,然后把html文件放入templates文件夹,在视图函数中,使用render_template(  ) 函数来渲染模板即可:

from flask import render_template
@app.route('/')
def fn():
return render_template('tempalte_1.html')

flask会自动去templates文件夹寻找相对应的html文件。

注意:如果HTML文件是在templates文件夹下 别的的文件夹下,渲染时应带上文件路径:

··· 
return render_template('file/xxx.html')
···

 

模板传参:

方式一:以关键字参数(等式)传递参数

from flask import render_template
@app.route('/')
def fn():
return render_template('html.html',name='lxc')

方式二:以字典形式传参(适用于参数多的情况下)

from flask import render_template
@app.route('/')
def fn():
dict = {'name':'lxc','age':20,'height':175}
return render_template('html.html',**dict)
<!-- html文件 -->
··· ···
<body>
<h1>hello,{{name}},年龄是{{age}},身高是:{{height}}</h1>
</body>
··· ···

模板中的if语句:

与python语法一样,if判断条件,条件成立执行下边对应html代码块,只不过在结束时,添加 endif 结束,来表名该if语句结束了。

写法:

{% if Boolean %}
<h1>xxx</h1>
{% else %}
<h1>xxx</h1>
{% endif %}

来一个简单应用:路径参数为1时,显示:姓名与注销;否则显示:亲,请登录! 和 注册

@app.route('/<is_login>')
def fn(is_login):
if is_login == '1':
info = {'name':'吕星辰','age':20}
return render_template('html.html',**info)
else:
return render_template('html.html')
# html.html文件
<body>
{% if name %} <!-- 判断是否有name属性,也可以判断是否有age属性-->
<h1>hello,{{name}},年龄{{age}}</h1>
<h1>注销</h1>
{% else %}
<h1>亲,请登录</h1>
<h1>注册账号</h1>
{% endif %}
</body>

python-web框架Flask-(五)jinjia2模板_flask

当然也可以,在if条件语句中比较:

# html.html文件
<body>
{% if name and age > 18 %} <!-- 判断是否有name属性,也可以判断是否有age属性-->
<h1>hello,{{name}},年龄{{age}}</h1>
<h1>注销</h1>
{% else %}
<h1>亲,请登录</h1>
<h1>注册账号</h1>
{% endif %}
</body>

 

模板中的for循环:

循环字典及列表,与if语句类似:

# 循环字典
{% for k,v in xxx.items() %}
<h1>{{k}}:{{v}}</h1>
{% endfor %}

# 循环列表
{% for item in xxx %}
<h1>{{item}}</h1>
{% endfor %}

小demo:

@app.route('/')
def fn():
info = {'name':'吕星辰','age':20}
return render_template('html.html',info=info)
# html模板
<body>
{% for k,v in info.items() %}
<h1>{{k}}:{{v}}</h1>
{% endfor %}
</body>

python-web框架Flask-(五)jinjia2模板_flask_02