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

posted @ 2017-02-18 15:53  Wasdns  阅读(216)  评论(0编辑  收藏  举报