一. 为什么要使用模板
视图函数有两个作用, 一个是业务逻辑一个是表现逻辑, 举例说明:
用户在网站注册了一个新账号, 用户在表单中输入电子邮件地址和密码, 点击提交按钮, 服务器接收到包含用户输入的请求, 然后Flask把请求分发到处理注册请求的视图函数。 这个视图函数需要访问数据库, 添加新用户(业务逻辑), 然后生成相应回送浏览器(表现逻辑)。
两个完全独立的作用被混淆到一起会使代码难以理解和维护, 所以我们选择吧表现逻辑(响应)迁移到模板当中去。
二. 如何使用模板
1.先来介绍什么是模板, 模板就是一个后缀为.html的文件, 文件内容就是视图函数的返回值
例1: templates/index.html
<h1>Hello World!</h1>
默认情况下, Flask在程序文件夹里的templates文件夹里寻找模板, 在下个版本的hello.py里, 要把模板保存到templates文件夹中。
例2:templates/user.html
<h1>Hello, {{name}}!</h1>
例2的文件内容包含一个使用变量表示的动态部分, 后面我们来解释它的用法
2.渲染模板
使用真实值替换变量, 再返回最终得到的响应字符串, 这一过程称为渲染:
from flask import Flask, render_template
#...
@app.route('/')
def index():
return render_template('index.html')
@app.route('/user/<name>')
def user(name):
return render_template('user.html', name=name)
render_template函数的第一个参数是模板文件名,
第二个参数是键值对, 等号左边是模板文件中的变量名, 右边是视图函数的参数也就是值。 我的理解就是render_template函数先用参数值替换掉模板文件中的变量, 然后把模板文件中的内容读出来作为响应返回。
3. 第2点讲的是原理,实际操作我们只需要把3a版本从版本库迁到工作区即可:
&git checkout 3a 执行后工作区的变化如下:
可以看到工作区多了一个templates文件夹, 文件夹里有两个模板文件。
之后把hello.py检查修改一下(迁出的部分代码可能省略了要检查修改一下)然后运行:
可以看到运行效果和之前一模一样, 但是我们的确使代码避免了混淆和难以维护, 这在复杂的视图函数中效果较明显。