文章内容

2023/5/17 21:22:47,作 者: 黄兵

Jinja2 中如何获取 g 全局变量和 session

在Jinja2模板中获取Flask中的g变量,您可以使用 {{ g.variable_name }} 表达式来访问变量值。这里的 variable_name 应该替换为您想要访问的实际变量名称。

例如,如果您在Flask应用程序中设置了g变量user,则可以在Jinja2模板中使用以下表达式来获取其值:

Welcome {{ g.user }}!

这将在渲染模板时将变量的值插入到输出中。请注意,如果g变量未在当前上下文中设置,则此表达式将引发 UndefinedError 异常。为了避免这种情况,您可以在访问g变量之前检查其是否已定义,例如:

{% if g.user %}
Welcome {{ g.user }}!
{% endif %}

这将仅在g.user已设置时输出欢迎消息。

如果页面产生了跳转,则 g 中的数据会丢失。

在 Flask 中,使用 g 对象传递的变量只能在同一次请求处理过程中的不同视图函数之间共享。如果您在请求处理期间跳转到另一个页面,例如使用 redirect() 函数或提交表单进行 POST 请求,则 g 中存储的值将不再可用,因为在新的请求处理过程中,Flask 会创建新的 g 对象。因此,在这种情况下,g 对象传递的变量将会丢失。

如果您需要在不同的请求之间传递数据,可以考虑使用会话(session)或 URL 查询参数(query string)等其他机制来传递数据。通过使用会话(session),您可以将数据存储在服务器端的会话对象中,以便在多个请求之间共享。而使用 URL 查询参数,则可以在不同的请求之间传递数据,因为查询参数会作为 URL 的一部分传递到下一个请求中。

例如,如果您需要在请求之间传递某个用户 ID,您可以将其存储在会话对象中:

from flask import session
# 在视图函数中设置会话变量
session['user_id'] = user.id
# 在另一个视图函数中获取会话变量
user_id = session.get('user_id')

或者,您可以在 URL 查询参数中传递用户 ID:

from flask import redirect, url_for
# 在视图函数中跳转到另一个 URL,并在查询参数中传递用户 ID
return redirect(url_for('other_view', user_id=user.id))
# 在另一个视图函数中获取查询参数
user_id = request.args.get('user_id')

如何在 jinja2 中获取 session 值?

在 Flask 中,您可以使用 Flask 的全局变量 session 来存储和获取会话数据。在视图函数中,将需要存储到会话中的数据存储在 session 对象中,然后在模板中通过 {{ session['key'] }} 的方式来获取它们的值。

例如,如果您需要在模板中获取用户登录后的用户名,您可以在视图函数中将用户名存储在 session 对象中,然后在模板中获取它:

from flask import session, render_template
@app.route('/login', methods=['GET', 'POST'])
def login():
if request.method == 'POST':
username = request.form['username']
password = request.form['password']
if check_login(username, password):
session['username'] = username # 将用户名存储在 session 中
return redirect(url_for('index'))
else:
flash('Invalid username or password')
return render_template('login.html')

在上面的示例中,check_login() 函数是您自己定义的用于检查用户名和密码的函数。在视图函数中,如果用户名和密码验证成功,则将用户名存储在 session 对象中,以便在模板中使用。

然后,在模板中,您可以通过以下方式获取用户名的值:

{{ session['username'] }}

在上面的示例中,我们假设您的模板名为 index.html,您需要在模板中显示当前用户的用户名。在模板中,我们使用 {{ session['username'] }} 的语法来获取用户名的值。当模板被渲染时,Jinja2 将使用 session 对象中的值来替换该语法。

其他相关推荐:

1、flask-jwt-oidc

2、Flask 获取客户端访问uri

3、Flask 模板传递变量

4、Flask如何获取User_Agent

5、flask url_for 如何使用

分享到:

发表评论

评论列表