![d0e610fd1d6ad50d36fafca8b73834f1.png](https://img-blog.csdnimg.cn/img_convert/d0e610fd1d6ad50d36fafca8b73834f1.png)
一、啥是模板引擎
关于Jinja2模板引擎,要从小明暗恋小红的事情说起。
大学的时候,小红是学校里的校花。有一天,小明在去食堂的路上看见站在远处的小红。
![cb283252661b89e1d289af336aca8fb4.png](https://img-blog.csdnimg.cn/img_convert/cb283252661b89e1d289af336aca8fb4.png)
于是… …
… … (此处省略100000字)… …
小明决定写个网页向美丽的小红表白。可是小红非常有钱,数码装备应有尽有:个人PC、平板电脑、手机、移动手表… …怎样才能写一份业务逻辑代码,让小红在响应式或非响应式设备上都能看到呢?
哈!机智的前辈早已看穿一切。为了提升开发效率,前后端的分离非常重要,后端负责业务逻辑/数据访问, 前端负责表现、交互逻辑。
![1b3d89bea0090443c2de2e60743b190b.png](https://img-blog.csdnimg.cn/img_convert/1b3d89bea0090443c2de2e60743b190b.png)
如果把业务逻辑和表现逻辑混在一起,势必造成系统耦合度高、代码维护困难的现象,因此分离业务逻辑和表现逻辑,把变现逻辑交给试图引擎,即网页模板,很有必要。
Flask提供了Jinja2模板引擎来渲染模板,实质上是一个静态的包含HTML语法的全部或片段的文本文件,当然也可以包含由变量表示的动态部分。
二、怎么用模板引擎
首先,新建一个叫templates的文件夹,并在文件夹下新建first.html和second.html文件,文件内容如下:
![7b58250cb0e9db178cd224f3f3662ab6.png](https://img-blog.csdnimg.cn/img_convert/7b58250cb0e9db178cd224f3f3662ab6.png)
(注:这里使用VS Code编辑HTML文件,也可以用Notepad++进行编辑。对于新手可以安装后者,如果需要安装教程可以在评论区留言。)
first.html内容如下:
![c6e950048757195320b836d506a23da3.png](https://img-blog.csdnimg.cn/img_convert/c6e950048757195320b836d506a23da3.png)
源代码:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8">
<title>这是第一页</title>
</head>
<body>
<h1>从我看到你的第一眼就爱上你了!</h1>
</body>
</html>
second.html内容如下:
![339f3ee903c0e998812ca5b0c9062687.png](https://img-blog.csdnimg.cn/img_convert/339f3ee903c0e998812ca5b0c9062687.png)
源代码:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8">
<title>这是第二页</title>
</head>
<body>
<h1>你可以嫁给我吗?</h1>
</body>
</html>
然后在templates文件夹外新建love.py文件,内容如下:
![b94e4f5eecda969e01a9513c6e5cbfc5.png](https://img-blog.csdnimg.cn/img_convert/b94e4f5eecda969e01a9513c6e5cbfc5.png)
from flask import Flask #导入模块
from flask import render_template
app = Flask(__name__)
@app.route('/') #定义第一页视图
def first():
return render_template('first.html')
@app.route('/second/') #定义第二页视图
def second():
return render_template('second.html')
if __name__ == '__main__':
app.run(debug=True)
其中最重要的是render_template()函数,使用时需要导入render_template模块,作用就是返回网页文件。
最后,在虚拟环境中运行python文件,并用浏览器输入网址http://127.0.0.1:5000测试:
![8ec67e93e7082e81e4b5c49f6a814917.png](https://img-blog.csdnimg.cn/img_convert/8ec67e93e7082e81e4b5c49f6a814917.png)
如要跳转到第二页需要手动输入网址http://127.0.0.1:5000/second/。其实在实际应用中,可以在第一页添加按钮,按钮指定唯一的网址就能实现跳转。用户登录按钮、确定按钮都是这个原理。
![992c0ca5e181783fff42e7c81f8b7e39.png](https://img-blog.csdnimg.cn/img_convert/992c0ca5e181783fff42e7c81f8b7e39.png)
三、如何向模板中传递参数
修改second.html和love.py文件。
HTML文件修改<h1>标签,如下:
<body>
<h1>{{name}},你可以嫁给我吗?</h1>
</body>
Python文件修改第二页视图文件,如下:
@app.route('/second/<hername>') #定义第二页视图
def second(hername):
return render_template('second.html', name=hername)
相同的方法进行测试。在第二页网址处需要手动传入参数http://127.0.0.1:5000/second/小红,回车后结果如下:
![be5bc761197947efd0bee894fdb5c566.png](https://img-blog.csdnimg.cn/img_convert/be5bc761197947efd0bee894fdb5c566.png)
在实际应用中,可以在HTML文件中用表单接收数据再进行传递,实现用户交互。
是不是觉得方便多了?
![00448ef6d5991787d8c15f07f7bec7e3.png](https://img-blog.csdnimg.cn/img_convert/00448ef6d5991787d8c15f07f7bec7e3.png)
除了以上简单应用外,Jinja2模板引擎中还可以使用if 和for循环控制语句,将在下一篇文章中进行介绍!
![bc563b60dd7bef7ea8c3fcf5628d5a20.png](https://img-blog.csdnimg.cn/img_convert/bc563b60dd7bef7ea8c3fcf5628d5a20.png)