目录
定义
模板引擎的作用就是读取并执行模板中的特殊语法标记,并根据传入的数据将变量替换为实际值,输出最终的HTML页面,这个过程被称为渲染( rendering)。
添加Python语句和表达式
1.语句
if判断、for循环等
{% ... %}
{% if user.bio %}
<i>{{ user.bio }}</i>
{% else %}
<i>This user has not provided a bio.</i>
{% endif %}
{% for movie in movies %}
<li>{{ movie.name }} - {{ movie.year }}</li>
{% endfor %}
2.表达式
字符串、变量、函数调用等
{{ .... }}
3.注释
{# ..... #}
for循环特殊变量
渲染模板
渲染函数 :render_template()
from flask import Flask,render_template
@app.route('/')
def hello_world():
user = '123'
name = 'zhangsan'
return render_template('index.html',user=user,name=name)
if __name__ == '__main__':
app.run()
函数说明
render_template()函数中,第一个参数为模板文件名,第二个参数为传入模板的变量(前面的user是模板内名称、后面的是要传的变量)
第二个参数设置为**locals(),实现给模板传递全部的本地变量,在模板中可以直接使用{{user}}、{{name}}。
注:render_template_string()函数用来渲染模板字符串。
return render_template_string('<h1>index</h1>') #可以执行html标签语句
上下文
模板中定义变量(set标签)
{% set navigation = [('/', 'Home'), ('/about', 'About')] %}
将一部分模板数据定义成变量
{% set navigation %}
<li><a href="/">Home</a>
<li><a href="/about">About</a>
{% endset %}
内置上下文变量
标准模板全局变量
自定义山下文
设置模板全局变量
app.context_processor装饰器,可以注册模板上下文处理函数,可以完成统一传入变量的工作,模板上下文函数需要返回一个包含变量键值对的字典。
@app.context_processor
def inject_foo():
foo = 'I am foo.'
return dict(foo=foo) # 等同于return {'foo': foo}
在调用render_template()函数渲染模板时,所有使用app.context_processor装饰器注册的模板上下文处理函数都会被执行,这些函数的返回值回被添加到模板中,在模板中就可以直接使用foo变量。
将app.context_processor作为方法调用,传入模板上下文处理函数
def inject_foo():
foo = 'I am foo.'
return dict(foo=foo)
app.context_processor(inject_foo)
使用lambda简化
app.context_processor(lambda: dict(foo='I am foo.'))