在Jinja2模板中使用DateTimeFields显示当地时间 - Django
在使用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) }}