Python/Django模板时区问题

A.J*_*.J. 1 python django timezone datetime

我有以下问题,无法弄清楚我在这里缺少什么.

我在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))
Run Code Online (Sandbox Code Playgroud)

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

我错过了什么?

s00*_*007 6

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

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

IE

{% load tz %}

<!-- template -->

{{ image.created_at | localtime }}

<!-- more template -->
Run Code Online (Sandbox Code Playgroud)


Sat*_*mar 6

将以下代码段添加到base.html {% load tz %} {% timezone "Asia/Kolkata" %} <All content goes here>{% endtimezone %} 将此代码 继承到所有模板.一切都在"亚洲/加尔各答"时区呈现


dan*_*son 3

来自文档

当地时间

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

例如:

{% load tz %}

{{ value|localtime }}
Run Code Online (Sandbox Code Playgroud)