Flask 5 模板1
NOTE
1.VF的作用:生成请求的响应。一般来说请求会改变程序的状态,这种变化会在视图函数中产生。
eg.用户在网站中注册了一个新账户,用户在表单中输入电子邮件地址和密码,然后提交到服务器,服务器接收到请求,然后Flask将请求分发到处理注册的视图函数。这个视图函数首先要访问数据库添加新用户,然后生成响应返回游览器。
访问数据库添加新用户的过程称为业务逻辑,生成响应返回称为表现逻辑。
2.将业务逻辑和表现逻辑混杂在一起使代码难以理解和维护。把表现逻辑移动到模板中能够提升程序的可维护性。
3.模板是一个保含响应文本的文件,其中有需要用上下文中的真实值替换占位变量的动态部分,也有无法改变的静态部分。
用真实值替换变量,返回响应字符串,称为渲染。
Flask使用了名为Jinja2的强大模板引擎。
4.Demo
Jinja2 templates/index.html
<h1>Hello World!</h1>
Jinja2 templates/user.html
<h1>Hello, {{ name }}!</h1>
模板渲染:从flask导入render_template函数,以集成Jinja2引擎。
#!/usr/bin/env python
from flask import Flask, render_template
app = Flask(__name__)
@app.route('/')
def index():
return render_template('index.html')
@app.route('/user/<name>')
def user(name):
return render_template('user.html', name=name)
if __name__ == '__main__':
app.run(debug=True)
name=name
关键字键值对,左边的name是参数名,右边的name是变量。
(venv) sh-3.2# ./hello.py
* Running on http://127.0.0.1:5000/ (Press CTRL+C to quit)
* Restarting with stat
* Debugger is active!
* Debugger pin code: 195-717-834
127.0.0.1 - - [18/Feb/2017 15:52:11] "GET / HTTP/1.1" 200 -
127.0.0.1 - - [18/Feb/2017 15:52:22] "GET / HTTP/1.1" 200 -
127.0.0.1 - - [18/Feb/2017 15:52:23] "GET /user/wasdns HTTP/1.1" 200 -
127.0.0.1 - - [18/Feb/2017 15:52:25] "GET /user/wasdns HTTP/1.1" 200 -
5.{{ name }}
结构表示一个变量,是一种特殊的占位符。Jinja2能够识别所有类型的变量,甚至是一些复杂的类型。
此外,可以使用过滤器来修改变量,过滤器名添加在变量名之后,中间使用竖线划分。
=> Flask的Jinja2模板引擎 — 过滤器(3rd)
safe 渲染值时不转义
capitaliza 把值的首字母替换为大写,其他为小写。
eg.
<h1>Hello, {{ name|capitalize }}!</h1>
@app.route('/user/<name>')
def user(name):
return render_template('filter.html', name=name)
127.0.0.1 - - [18/Feb/2017 16:11:01] "GET /user/wasdns HTTP/1.1" 200 -
出于安全考虑,Jinja2会转义所有变量。有些情况下需要显示变量中存储的html代码,这个时候就需要使用safe过滤器。
2017/2/18
To improve is to change, to be perfect is to change often.