Python Flask,Jinja Global

时间:2017-01-31 18:38:34

标签: python html flask sqlite

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

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

这是我用来获取邮件数量的代码: function constantTimePickPair pairFound <- false repeats <- 5 // Or enough to ensure certainty of a valid pair. do repeats times num1 <- random(A, B) num2 <- random(A, B) if (notAdjacent(num1, num2)) pairFound <- true result <- (num1, num2) end if end do if (NOT pairFound) throw error "Pair not found." end if return result end function

但是我收到此错误: def message_notification(): c.execute("SELECT count(*) FROM messages WHERE read = 0 AND receiver = ?",(session['username'],)) msgnotifcation = c.fetchone() return msgnotifcation[0]

有没有其他方法可以做到这一点,因为我发现问题与会话[&#39;用户名&#39;]位有关。

1 个答案:

答案 0 :(得分: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 }}