Jinja2是Python下一个被广泛应用的模版引擎,他的设计思想来源于Django的模板引擎,并扩展了其语法和一系列强大的功能。
1.模板
模板简单来说就是用来渲染视图的。也就是传说中的MVC:Model-View-Controller,中的View层。Flask通过render_template()函数来实现模板的渲染。和Web框架类似,Python的模板也有很多种。Flask默认支持的模板是jinja2,所以我们以下命令安装jinja2。
pip3 install jinja2
2.实例
我们把上小节的用户登录的案例,改为使用模块实现。
项目结构图如下:

1).新建templates目录用来存放模板文件,创建以下三个模板文件。
index.html
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>首页</title>
</head>
<body>
<h1 style="font-style:italic">首页</h1>
</body>
</html>
login.html
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
<h1>用户登录</h1>
<hr>
{% if message %}
<p style="color:red">{{ message }}</p>
{% endif %}
<form action="/signin" method="post">
<p><input name="username" placeholder="用户名" value="{{ username }}"></p>
<p><input name="password" placeholder="密码" type="password"></p>
<p><button type="submit">登录</button></p>
</form>
</body>
</html>
login_success.html
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Welcome, {{ username }}</title>
</head>
<body>
<p>Welcome, {{ username }}!</p>
</body>
</html>
2).编写app.py,服务器端程序。
# -*- coding: utf-8 -*-
# @Time : 2022/5/14 10:27
# @File : app.py
# @Software : PyCharm
from flask import Flask, request, render_template
app = Flask(__name__)
@app.route('/', methods=['GET', 'POST'])
def home():
return render_template('index.html')
@app.route('/signin', methods=['GET'])
def signin_form():
return render_template('login.html')
@app.route('/signin', methods=['POST'])
def signin():
username = request.form['username']
password = request.form['password']
if username=='admin' and password=='123456':
return render_template('login_success.html', username=username)
return render_template('login.html', message='用户名或者密码错误。', username=username)
if __name__ == '__main__':
app.run(host='127.0.0.1',port=8080,debug = True)
运行结果:
再在浏览器地址栏输入http://localhost:8080/signin,会显示登录表单:

输入预设的用户名admin和口令123456,登录成功:

除了Jinja2,常见的模板还有:
小结: Flask通过render_template()函数来实现模板的渲染。和Web框架类似,Python的模板也有很多种。Flask默认支持的模板是jinja2