【问题标题】:How do i pass a variable to all flask routes once? [duplicate]如何一次将变量传递给所有烧瓶路线? [复制]
【发布时间】:2021-07-03 13:00:32
【问题描述】:

所以我有这个 Flask 应用程序,我需要将特定用户传递给所有路由,因为应用程序中的所有页面都需要特定用户来呈现模板。我不想像正常那样通过用户

return render_template('index.html',user=user)

因为我必须对 render_templates 中的所有路由重复相同的操作。 请问我该怎么做?

【问题讨论】:

  • 变量user是从哪里来的或者是在哪里设置的?在函数内部还是全局?
  • 用户实际上是全局的,因为它是导入的。如何通过 render_template 函数将其发送到所有页面的问题。更像是 render_template 的默认参数
  • 你可以使用全局变量,它在模板中自动可用flask.palletsprojects.com/en/2.0.x/tutorial/templates/…

标签: python flask jinja2


【解决方案1】:

您可以通过使用以下实现创建自定义渲染模板函数来做到这一点

from flask import render_template as real_render_template
from yourapp import user  # Import the user variable or set it

def render_template(*args, **kwargs):
    return real_render_template(*args, **kwargs, user=user)

也可以通过functools.partial:

from flask import render_template as real_render_template
from yourapp import user  # Import the user variable or set it
from functools import partial

render_template = partial(real_render_template, user=user)

【讨论】:

    【解决方案2】:

    如果您想将变量发送到所有路由/页面/模板。您可以在烧瓶中使用会话

    from flask import Flask,session
    [...]
    session['x'] = user
    

    现在你可以在代码的任何地方使用它,模板使用 session['x']

    在模板中

    {{session['x']}}
    

    【讨论】:

    • 会话变量会自动在模板文件中可用吗?例如 url_for 函数是这样的,因为 jinja2 config with flask
    • 是的,一旦您在烧瓶中定义,它将可用。您还需要定义一个 secret_key。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-04-08
    • 2020-12-21
    • 1970-01-01
    • 1970-01-01
    • 2017-08-20
    • 2017-11-19
    相关资源
    最近更新 更多