如何在Jinja2中将时间戳更新为全局变量?

2 投票
1 回答
1819 浏览
提问于 2025-04-17 23:58

我知道这里有类似的问题,但那些对我没有帮助。

在我的主 py 文件中,我设置了一个叫 nowts 的全局变量,代码如下:

app.jinja_env.globals['nowts'] = datetime.datetime.now()

然后在主模板(base.html 文件)中,我传递并格式化了日期时间,代码如下:

{% block navbar %}
... 
<p>{{ nowts.strftime('%A, %b %d %Y / %X') }}</p>
...
{% endblock %}

比如,输出是:

Wednesday, Mar 26 2014 / 11:57:51

如你所见,日期和时间显示得很正确,但只显示一次。过了几分钟后,我重新打开主页面(或子页面),时间还是一样的。如果用户刷新页面,怎么才能让 nowts 这个全局变量一直更新呢?

1 个回答

5

使用上下文处理器来在每次请求时注入值:

@app.context_processor
def inject_template_globals():
    return {
        'nowts': datetime.datetime.utcnow(),
    }

通常来说,网页服务器应该使用协调世界时(UTC),而不是当地时间。因为你永远不知道请求来自世界的哪个地方。

撰写回答