Flask每个请求都有生命周期,在生命周期内请求有其上下文环境Request Context。作为在请求中渲染的模板,自然也在请求的生命周期内,所以Flask应用中的模板可以使用到请求上下文中的环境变量,及一些辅助函数。本文就会介绍下这些变量和函数。
标准上下文变量和函数
请求对象request
request对象可以用来获取请求的方法”request.method”,表单”request.form”,请求的参数”request.args”,请求地址”request.url”等。它本身是一个字典。在模板中,你一样可以获取这些内容,只要用表达式符号”{{ }}”括起来即可。
在没有请求上下文的环境中,这个对象不可用。
会话对象session
session对象可以用来获取当前会话中保存的状态,它本身是一个字典。在模板中,你可以用表达式符号”{{ }}”来获取这个对象。
Flask代码如下,别忘了设置会话密钥哦:
|
@app.route('/')
def index():
session['user']='guest'
returnrender_template('hello.html')
app.secret_key='123456'
|
模板代码:
|
<p>User:{{session.user}}</p>
|
在没有请求上下文的环境中,这个对象不可用。
全局对象g
全局变量g,用来保存请求中会用到全局内容,比如数据库连接。模板中也可以访问。
Flask代码:
|
@app.route('/')
def index():
g.db='mysql'
returnrender_template('hello.html')
|
模板代码:
g对象是保存在应用上下文环境中的,也只在一个请求生命周期内有效。在没有应用上下文的环境中,这个对象不可用。
Flask配置对象config
导入的配置信息,就保存在”app.config”对象中。这个配置对象在模板中也可以访问。
|
<p>Host:{{config.DEBUG}}</p>
|
“config”是全局对象,离开了请求生命周期也可以访问。
url_for()函数
url_for()函数可以用来快速获取及构建URL,Flask也将此函数引入到了模板中,比如下面的代码,就可以获取静态目录下的”style.css”文件。
|
<link rel="stylesheet"href="{{ url_for('static', filename='style.css') }}">
|
该函数是全局的,离开了请求生命周期也可以调用。
get_flashed_messages()函数
get_flashed_messages()函数是用来获取消息闪现的。这也是一个全局可使用的函数。
自定义上下文变量和函数
自定义变量
除了Flask提供的标准上下文变量和函数,我们还可以自己定义。下面我们就来先定义一个上下文变量,在Flask应用代码中,加入下面的函数:
|
from flask import current_app
@app.context_processor
def appinfo():
returndict(appname=current_app.name)
|
函数返回的是一个字典,里面有一个属性”appname”,值为当前应用的名称。我们曾经介绍过,这里的”current_app”对象是一个定义在应用上下文中的代理。函数用”@app.context_processor”装饰器修饰,它是一个上下文处理器,它的作用是在模板被渲染前运行其所修饰的函数,并将函数返回的字典导入到模板上下文环境中,与模板上下文合并。然后,在模板中”appname”就如同上节介绍的”request”, “session”一样,成为了可访问的上下文对象。我们可以在模板中将其输出:
|
<p>Current App is:{{appname}}</p>
|
自定义函数
同理我们可以自定义上下文函数,只需将上例中返回字典的属性指向一个函数即可,下面我们就来定义一个上下文函数来获取系统当前时间:
|
import time
@app.context_processor
def get_current_time():
def get_time(timeFormat="%b %d, %Y - %H:%M:%S"):
returntime.strftime(timeFormat)
returndict(current_time=get_time)
|
我们可以试下在模板中将其输出:
|
<p>Current Time is:{{current_time()}}</p>
<p>Current Day is:{{current_time("%Y-%m-%d")}}</p>
|
上下文处理器可以修饰多个函数,也就是我们可以定义多个上下文环境变量和函数。
完整实例:
flask代码:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
|
from flask import Flask,render_template,session,g,current_app
import time
app=Flask(__name__)
@app.route('/')
def index():
session['user']='guest'
g.db='mysql'
returnrender_template('hello-2.html')
@app.context_processor
def appinfo():
returndict(appname=current_app.name)
@app.context_processor
def get_current_time():
def get_time(timeFormat="%b %d, %Y - %H:%M:%S"):
returntime.strftime(timeFormat)
returndict(current_time=get_time)
app.secret_key='123456'
if__name__=='__main__':
app.run(debug=True)
|
模板代码:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
|
<!doctype html>
<title>Hello Sample</title>
<link rel="stylesheet"href="{{ url_for('static', filename='style.css') }}">
<h1>Hello World!</h1>
<p>Request URL:{{request.url}}</p>
<p>User:{{session.user}}</p>
<p>DB:{{g.db}}</p>
<p>Host:{{config.DEBUG}}</p>
<p>Current App is:{{appname}}</p>
<p>Current Time is:{{current_time()}}</p>
<p>Current Day is:{{current_time("%Y-%m-%d")}}</p>
{%with messages=get_flashed_messages()%}
{%ifmessages%}
{%formessage inmessages%}
Flash Message:{{message}}</li>
{%endfor%}
{%endif%}
{%endwith%}
|
分享到:
相关推荐
在本文中,我们将深入探讨Flask框架使用的Jinja2模板引擎的SSTI漏洞及其绕过策略。 Flask是一个轻量级的Python Web应用框架,而Jinja2是它默认的模板引擎。Jinja2允许开发者通过模板语言来动态生成HTML或其他格式的...
接着,创建一个基本的Flask应用,配置Jinja2为默认的模板引擎: ```python from flask import Flask app = Flask(__name__) app.jinja_env.trim_blocks = True app.jinja_env.lstrip_blocks = True ``` 这里设置了两...
Flask是一款轻量级的Python Web框架,Jinja2则是一个强大的模板引擎,用于生成动态HTML页面,而Echarts则是一款由百度开发的开源JavaScript图表库,能够生成各种交互式的数据图表。接下来,我们将深入探讨这三个组件...
Jinja2是一个流行的模板引擎,用于Python编程语言,广泛用于Web开发框架如Flask和Django中。其核心功能是将数据与模板结合生成HTML页面或其他格式的文档。 在本文中,会通过实例代码详细解释如何使用Jinja2来生成...
flask中jinja2使用全局变量
Jinja2是一个强大的模板语言,常用于Python web开发,如Flask和Django框架。通过Htmlc,开发者可以方便地在Sublime Text3环境中进行模板开发和预览,提高了工作效率。 **Jinja2 模板引擎** Jinja2是Python的一个...
**Flask 与 Jinja2 模板引擎详解** Flask 是一个轻量级的 Python Web 开发框架,它的灵活性和简洁性使得开发者能够快速构建应用程序。在 Flask 中,我们通常会结合使用 Jinja2 模板引擎来处理视图渲染,实现动态...
在Flask中,常用的模板引擎是Jinja2。本文将详细介绍Flask的模板引擎使用方法和一些基本的语法知识。 首先,Flask框架通过模板引擎将数据嵌入到HTML模板中。模板文件通常以.html为后缀,它们是按照特定的规则书写的...
本教程将围绕Flask、Jinja2模板引擎以及MySQL数据库展开,帮助初学者快速入门Python Web开发。 首先,我们要了解**Flask**。Flask是一个基于Python的微框架,适用于构建小型到中等规模的Web应用。它的核心功能包括...
2. **Jinja2模板引擎**:Jinja2是Flask推荐的HTML模板引擎,用于将动态数据和静态HTML结构结合,生成最终的网页。在问答平台上,Jinja2模板用于渲染用户界面,如登录注册页面、问题列表、问题详情页等。它支持条件...
总而言之,Flask框架配合Jinja2模板引擎提供了非常灵活的方式来构建Web应用。通过模板继承、装饰器、缓存策略以及路由控制,开发者可以轻松地实现丰富的Web应用功能。这些知识点对于希望在Python环境下快速开发Web...
Flask:Flask模板引擎使用与HTML渲染.docx
Flask是一个用Python编写的轻量级Web应用框架,它使用Jinja2作为默认的模板引擎,Jinja2模板系统是由日本人开发的,它从Django的模板系统中汲取灵感,提供了与Django模板类似的功能,但也增加了一些额外的特性,比如...
2. Jinja2:Jinja2是Python的一个强大且现代的模板引擎,与Flask紧密集成。在本项目中,Jinja2用于创建动态HTML页面。开发者可以定义模板文件,其中包含可替换的占位符,然后在后端通过传递数据来渲染这些模板。...
**Python-Jinja2模板引擎详解** Jinja2是一款强大的、高效且灵活的纯Python模板引擎,它是基于Python语言设计的,无需任何外部依赖。由Pallets团队开发,广泛应用于Web应用开发,如Flask框架中。Jinja2的设计灵感...
模板是HTML文件,其中可以包含动态内容,如变量和控制结构,Flask支持Jinja2模板引擎,这是一种强大而灵活的模板语言。 在实际开发中,Flask的应用通常会需要数据库支持。Flask通过SQLAlchemy或SQLite等库提供...