如何在 jinja 2 - Flask 中访问会话变量

Posted

技术标签:

【中文标题】如何在 jinja 2 - Flask 中访问会话变量【英文标题】:How to access session variables in jinja 2 - Flask 【发布时间】:2017-06-20 03:57:30 【问题描述】:

我需要手动将会话变量从 Flask 传递到我的 html 还是以某种方式自动发送?

可以吗

return render_template('index.html')

并访问会话变量username,例如HTML文件中的session['username'

【问题讨论】:

【参考方案1】:

@bpb101 在 Jinja2 格式上是正确的(尽管像其他人提到的那样省略了空格)。在 HTML/Jinja2 模板中,您可以简单地调用 session 字典而不将其传递给模板:

 session['username'] 

但是,在 Python 代码中的另一个示例实际上会用字符串 'username' 覆盖 session['username'] 的值,这是由于变量分配。如果您尝试将变量设置为 session['username'] 的值,您将使用:

username = session['username']

否则,如果您只是出于其他原因需要测试或使用该值,您可以直接访问它,例如:

if session['username'] == some_value:
    return "The username is", session['username']

希望这对刚接触 Flask 或 Jinja2 的人有所帮助,他们可能想知道为什么他们的会话变量会被覆盖。

【讨论】:

【参考方案2】:

如果您想使用会话隔离 HTML 的某些部分,您可以直接在这些元素上调用会话:

% if session['username'] %
<li>Logout</li>
% endif %

【讨论】:

【参考方案3】:

在python中

session['username'] = 'username'

在jinja2你可以去

session['username']

【讨论】:

注意是 session['username'] (加空格) 是否可以反过来使用会话变量:即。 set session['username'] = 'username' 在模板中? 烧瓶教程展示了点符号的使用,例如session.logged_in。参考:flask.pocoo.org/docs/0.12/tutorial/templates

以上是关于如何在 jinja 2 - Flask 中访问会话变量的主要内容,如果未能解决你的问题,请参考以下文章

如何让 python 使用 Flask 和 JINJA2 从动态表中检索用户输入的数据

flask框架下的jinja2模板引擎

Flask jinja2 检索下拉列表的值

Flask Jinja2模板语言

Flask模板jinja2

Python安全 | Flask-jinja2 SSTI 利用手册