Python Web开发之Flask框架(二)
jinjia2模板渲染引擎
我们访问的页面需要在用户访问时根据程序逻辑动态生成,模板就是包含变量和运算逻辑的HTML或其他格式的文本,执行这些变量替换和逻辑计算工作的过程叫做渲染;
按照默认,Flask会从程序实例所在同级目录的templates文件夹中寻找模板(创建的模板可以存放在新建的templates文件夹中)
模板基本语法

三种常用定界符:
- {{ … }} 用来标记变量。
- {% … %} 用来标记语句,比如if语句,for语句等。
- {# … #} 用来写注释。
模板中使用的变量需要在渲染的时候传递进去。
在templates目录下创建一个index.html文件作为模板。
index.html模板
<!DOCTYPE html> <html lang="en"> <head> <meta charset="utf-8"> <title>{{ name }}'s Watchlist</title> </head> <body> <h2>{{ name }}'s Watchlist</h2> {# 使用 length 过滤器获取 movies 变量的长度 #}
<p>{{ movies|length }} Titles</p> <ul>
{% for movie in movies %} {# 迭代 movies 变量 #} <li>{{ movie.title }} - {{ movie.year }}</li> {# 等同于 movie['title'] #} {% endfor %} {# 使用 endfor 标签结束 for 语句 #}
</ul> <footer> <small>© 2018 <a href="http://helloflask.com/tutori al">HelloFlask</a></small> </footer> </body> </html>
为模板准备一些虚拟数据:
name = 'fuyuan' movies = [{'title':'流浪地球','year':'2019'}, {'title':'哥斯拉2','year':'2019'}, {'title':'唐人街探案2','year':'2020'}, {'title':'复仇者联盟2','year':'2020'}, {'title':'影子特工队','year':'2019'}, {'title':'星球大战3','year':'2018'}]
通过使用render_template( )函数可以把模板渲染出来,传入的参数为模板的文件名,即上面的’index.html’,还有模板中需要传入的参数;
#--coding:utf-8 -- from flask import Flask,render_template app = Flask(__name__) name = 'fuyuan' movies = [{'title':'流浪地球','year':'2019'}, {'title':'哥斯拉2','year':'2019'}, {'title':'唐人街探案2','year':'2020'}, {'title':'复仇者联盟2','year':'2020'}, {'title':'影子特工队','year':'2019'}, {'title':'星球大战3','year':'2018'}] @app.route('/index') def index(): return render_template('index.html',name = name,movies = movies) if __name__ == '__main__': app.run(host='0.0.0.0',debug= True)
在render_template函数中左边的name/movies是index.html模板中使用的变量名,右边的name/movies是该变量实际指向的对象,这里模板中name变量实际指向的是虚拟数据中name字符串,模板中movies变量实际指向的是虚拟数据中movies列表,当然模板中传入的数据结构也可包含,元祖、字典、函数等。
运行上述代码,在浏览器中输入http://localhost:5000/index,浏览器返回如下主页。


浙公网安备 33010602011771号