【问题标题】:Python Flask, Jinja GlobalPython Flask, Jinja Global
【发布时间】:2017-01-31 18:38:34
【问题描述】:

我目前正在使用 Python Flask 和 Jinja2。我有一张桌子,上面有一些信息。我想基本上在菜单上有一个按钮,其中包含用户拥有的消息数量。

我使用它来使我的侧边栏全局化,以便它可以出现在多个页面上: app.jinja_env.globals.update(...)

这是我用来获取消息数量的代码: def message_notification(): c.execute("SELECT count(*) FROM messages WHERE read = 0 AND receiver = ?",(session['username'],)) msgnotifcation = c.fetchone() return msgnotifcation[0]

但是我收到此错误: RuntimeError: Working outside of request context.

有没有其他方法可以做到这一点,因为我发现问题与 session['username'] 位有关。

【问题讨论】:

    标签: python html flask sqlite


    【解决方案1】:

    您需要移动此代码,以便它在模板开始呈现之前执行,即它将位于请求上下文中。

    Flask 提供了 context_processor 装饰器来实现这一点。 http://flask.pocoo.org/docs/0.12/templating/#context-processors 返回的值将在您的所有模板中可用,就好像它们已作为视图中的任何其他上下文项返回一样。

    @app.context_processor
    def message_count():
        value = ...your sql...
        return dict(message_count=value)
    

    那么在你的观点中你可以使用:

    {{ message_count }}
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2020-08-31
      • 1970-01-01
      • 1970-01-01
      • 2019-01-02
      • 1970-01-01
      • 2020-10-20
      • 1970-01-01
      相关资源
      最近更新 更多