一、模板
模板是一个文件。该文件包含了响应文本,文本中使用了占位变量来表示动态部分。
1.模板的作用
视图函数的作用是生成请求的响应,而把业务逻辑和表现逻辑都混合在一起写到视图函数中导致代码难以理解和维护,因此需要把表现逻辑移到模板中,做到在视图函数中编写形式简洁且结构良好的代码。
2.渲染
模板中的占位变量使用真实值替换后再返回最终得到的响应字符串的过程叫渲染。
二、Jinja2 模板引擎
Jinja2 是一个 Python 的功能齐全的模板引擎。它有完整的 unicode 支持,一个可选的集成沙箱执行环境,被广泛使用,以 BSD 许可证授权。
以上是官方说明,简单来说,它提供了替换功能(使用真实值替换占位变量)和一些强大的特性(控制流、继承等),可以快速生成数据文件,使得业务与数据分离开来,满足一些灵活多变的配置需求。
1.安装 Jinja2
激活虚拟环境后,使用 pip 安装 flask 的同时连带着 Jinja2 也一起安装了。
2.使用 Jinja2
默认情况下,Flask 在应用目录中的 templates 子目录下寻找模板文件。换句话说,要使用 Jinja2 渲染模板,首先需要在项目目录中创建一个 templates 子目录,然后把定义好的模板文件保存在该目录下。
Flask 提供的 render_template() 函数把 jinja2 模板引擎集成到了应用中。该函数的第一个参数是模板的文件名,随后的参数都是键值对,表示模板中占位变量对应的具体值。
2.1 不使用占位变量的模板
在 /hello.py 中写一个视图函数 index()。
1
2
3
4
5
6
from flask import Flask, render_template
app = Flask(__name__)
@app.route('/')
def index():
return render_template('index.html')
在 /templates/index.html 中定义一个不需要占位变量的 HTML 字符串模板。
1
<h1>haauleon is a 美腻的 girl!</h1>
实现效果如下:
2.2 使用占位变量的模板
在 /hello.py 中写一个视图函数 user(name)。
1
2
3
4
5
6
from flask import Flask, render_template
app = Flask(__name__)
@app.route('/user/<name>')
def user(name):
return render_template('user.html', name = name)
在 /templates/index.html 定义一个不需要占位变量的 HTML 字符串模板。
实现效果如下:
2.3 使用变量过滤器修改占位变量
(1)过滤器的使用方式为:变量名 | 过滤器
。
变量过滤器 striptags 可以在渲染之前把值中所有的 HTML 标签都删掉。
实现效果如下:
(2)Jinja2 中的过滤器可以支持链式调用。
变量过滤器 capitalize 可以把首字母换成大写其他换成小写,变量过滤器 trim 可以把值的首尾空格删掉。
实现效果如下:
更多变量过滤器的使用介绍,详见:Jinja2 内置变量过滤器的官方文档。