上下文环境
Flask每个请求都是有生命周期,作为请求的渲染模板,处理渲染过程也都是在请求的生命周期内,所以Flask应用中的模板可以使用到请求上下文中的环境变量。
请求对象request
request对象可以用来获得请求的方法“request.method”,表单“request.form”,请求的参数“request。args”,请求地址“request.url”等,request对象本身就是一个字典,在模板中一样可以获得这些内容。
1 | <p>{{ request.url }}</p> |
会话对象session
session对象可以用来获取当前会话中保存的状态,session对象本身也是一个字典:
1 |
|
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 |
|
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 |
|
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 |
|
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') }} |