在Jinja2模板中使用DateTimeFields显示当地时间 - Django

8 投票
1 回答
3508 浏览
提问于 2025-04-18 03:59

在使用Django和Jinja2的时候,发现datetime对象不会自动转换为本地时区,即使USE_TZ=True也不行。这样的话,时间值还是保持在UTC时区。

我通过创建一个过滤器来解决这个问题,这个过滤器会对值运行localtime()

不过,我不太确定如何对DateTimeFields做同样的事情。在模板中,我有{{ field }},其中field是DateTimeField,但我找不到地方可以放过滤器。

那么,怎样才能把DateTimeField的值转换为当前时区呢?

1 个回答

7

幸运的是,这个问题的解决方法相对简单。Django 提供了一个叫做 template_localtime 的函数,按照文档的说明,它的作用是:

“检查值是否是一个日期时间,如果需要的话,就把它转换为当地时间。”

要在 Jinja2 模板中使用这个功能,可以创建一个模板过滤器或者一个全局函数。下面的例子展示了这两种方法:

from django.utils.timezone import template_localtime

env = Environment(**kwargs)
env.filters.update({
    'localtime': template_localtime,
})
env.globals.update({
    'localtime': template_localtime,
})

然后你可以在 Jinja2 模板中这样使用它们:

{{ item.date|localtime }}
{{ localtime(item.date) }}

撰写回答