Jusene's Blog

Flask框架jianja2模板引擎之上下文环境

字数统计: 638阅读时长: 2 min
2017/12/16 Share

上下文环境

Flask每个请求都是有生命周期,作为请求的渲染模板,处理渲染过程也都是在请求的生命周期内,所以Flask应用中的模板可以使用到请求上下文中的环境变量。

请求对象request

request对象可以用来获得请求的方法“request.method”,表单“request.form”,请求的参数“request。args”,请求地址“request.url”等,request对象本身就是一个字典,在模板中一样可以获得这些内容。

1
<p>{{ request.url }}</p>

会话对象session

session对象可以用来获取当前会话中保存的状态,session对象本身也是一个字典:

1
@app.route('/')
2
def index():
3
    session['user']='guest'
4
    return render_template('hello.html')
5
app.secret_key='123456'

模版获取:

1
<p>User: {{ session.user }}</p>

全局对象g

全局变量g,用来保存请求中会用到全局内容,模板中也可以访问。

1
@app.route('/')
2
def index():
3
    g.db='mysql'
4
    return render_template('hello.html')

模板获取:

1
<p>DB: {{ g.db }}</p>

Flask配置对象config

导入的配置信息,就保存在‘app.config’对象中。这个配置对象在模板中也可以访问,‘config’是全局对象,离开了请求生命周期也可以访问。

1
<p>Host: {{ config.DEBUG }}</p>

url_for函数

url_for()函数可以用来快速获取及构建URL,Flask也将此函数引入到了模板中。

1
<link rel='stylesheet' href="{{ url_for('static',filename='style.css') }}">

get_flashed_message()函数

get_flashed_message()函数是用来获取消息闪现的,这是一个全局可使用的函数。

自定义变量

除了Flask提供的标准上下文变量和函数,我们还可以自定义:

1
from flask import current_app
2
3
@app.context_processor
4
def appinfo():
5
    return dict(appname=current_app.name)

函数用“@app.context_processor”装饰器修饰,他是一个上下文处理器,他在模板被渲染前运行其所修饰的函数,并将函数返回的字典导入模板的上下文,与模板上下文合并。

1
<p>Current App is: {{ appname }}</p>

自定义函数

同理我们可以自定义上下文函数,只需要将上例中返回字典的属性指向函数即可:

1
import time
2
3
@app.context_processor
4
def get_current_time():
5
    def get_time(time_format='%Y-%m-%d %H:%M:%S'):
6
            return time.strftime(time_format)
7
    return dict(current_time=get_time)

模板调用:

1
<p>Current Time is: {{ current_time() }}</p>
2
<p>Current Time is: {{ current_time('%Y-%m-%d') }}
CATALOG
  1. 1. 上下文环境
    1. 1.1. 请求对象request
    2. 1.2. 会话对象session
    3. 1.3. 全局对象g
    4. 1.4. Flask配置对象config
    5. 1.5. url_for函数
    6. 1.6. get_flashed_message()函数
    7. 1.7. 自定义变量
    8. 1.8. 自定义函数