Python / Django模板时区问题



我遇到了以下问题,无法弄清楚我在这里错过了什么。

我已在 settings.py 中启用时区

Settings.py

TIME_ZONE = 'America/Chicago'

USE_TZ = True

用例

现在,当我在下午 3.15(当地时间)创建一个对象时,我将以下日期存储在数据库中的created_at字段中。

created_at = models.DateTimeField(auto_now_add=True)

2014-12-12 11:03:48

当我在模板中呈现该日期时,我得到以下值。

{{ image.created_at }} => Dec. 12, 2014, 5:03 a.m.

测试用例

    from datetime import datetime
    from dateutil.tz import tzutc, tzlocal
    utc = datetime.now(tzutc())
    print('UTC:   ' + str(utc))
    local = utc.astimezone(tzlocal())
    print('Local: ' + str(local))

我在这里得到了正确的日期时间。当我使用myobject.created_at.astimezone(tzlocal())时,它也返回正确。但是在模板中,我提前 1 小时。为什么?我也尝试了两个过滤器|local但没有用

我错过了什么?

将以下代码片段添加到基数中.html

{% load tz %}
{% timezone "Asia/Kolkata" %}
  <All content goes here>
{% endtimezone %}

将此内容继承到所有模板。所有内容均以"亚洲/加尔各答"时区呈现

Django 总是以 UTC 格式存储数据,并带有时区感知信息。您的 settings.py 适用于美国/芝加哥,因此模板会相应地呈现它。

您可以在模板中使用时区筛选器来始终显示本地时间{{ image.created_at | localtime }}。 在模板开始时{% load tz %}时区标记库。

{% load tz %}
<!-- template -->
{{ image.created_at | localtime }}
<!-- more template -->

从文档中:

当地时间

强制将单个值转换为当前时区。

例如:

{% load tz %}
{{ value|localtime }}

TIME_ZONE设置是默认设置(通常是服务器位置时区) 要显示与登录用户相关的时间信息,您应该阅读此处的文档

我找到了使用自定义模板过滤器的简单方法,请参阅此答案。

过滤器前:2022-09-15 17:56:26.936210过滤器后 -> 15.09.2022 20:56

相关内容

  • 没有找到相关文章

最新更新