我遇到了以下问题,无法弄清楚我在这里错过了什么。
我已在 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