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

Posted

技术标签:

【中文标题】在 Jinja2 模板中使用 DateTimeFields 显示本地时间 - Django【英文标题】:Displaying local time using DateTimeFields in Jinja2 templates - Django 【发布时间】:2014-06-08 19:05:10 【问题描述】:

使用 Django 和 Jinja2 时,datetime 对象似乎不会自动转换为本地时区,即使 USE_TZ=True 也是如此。相反,该值仍为 UTC。

我能够通过创建一个在值上运行 localtime() 的过滤器来解决这个问题。

但是,我不确定如何使用 DateTimeFields 做同样的事情。在模板中,我有 field ,其中字段是DateTimeField,但是没有地方可以放置过滤器。

DateTimeField 值转换为当前时区的最佳方法是什么?

【问题讨论】:

谁是当前时区?服务器还是网络浏览器? timezone.get_current_timezone()返回的服务器时区 啊..查看此链接***.com/questions/14657173/… @user590028,适用于普通 Django 模板,但不适用于 Jinja2 模板。 【参考方案1】:

谢天谢地,这是一个相对简单的解决方法。 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) 

【讨论】:

以上是关于在 Jinja2 模板中使用 DateTimeFields 显示本地时间 - Django的主要内容,如果未能解决你的问题,请参考以下文章

Jinja2 模板使用 Django 模板标签

Flask Jinja2模板语言

如何在 Django 1.8 中使用 jinja2 作为模板引擎

Jinja2模板语言

Ansible Jinja2 模板概述 --01

如何使用 Jinja2 模板在烧瓶中解码 &#39 [重复]