您好,我升级到 django 1.4,我想利用时区支持,我在 postgres 中保存了一些日期时间字段,并且在我设置后,它们是假设我所在城市的时区保存的
USE_TZ = True
并将时区设置为我的城市,模板中的日期过滤器标签输出正确的小时(时区)
{{ concert.datetime|date:'f' }}
问题是:我使用日期时间来构建我的网址,如下所示:
{% url event artist_slug=concert.slug_name hour=concert.datetime.hour %}
这些时间分区不正确,小时仍然是UTC,这会改变我的链接,这是我无法做到的,它会失去所有页面排名和许多要使用的网站链接,这是不可行的,更不用说它了看起来很奇怪,该网址的时间与广告中的时间不同。
我试过这个:
{% url event artist_slug=concert.slug_name hour=concert.datetime.hour|date:'H' %}
如果不成功,则不会应用日期过滤器标记并引发异常。
我有一个相当大的代码库和很多模板,有没有办法在不使用返回日期时间时区的访问器的情况下解决这个问题?
谢谢。
实际上 Django 文档指出:
即使您的网站仅在一个时区可用,它仍然
在数据库中以 UTC 格式存储数据的良好做法。一个主要原因
是夏令时 (DST)。许多国家都有夏令时制度,
春天时钟向前拨动,秋天时钟向后拨动。如果
你在当地时间工作,你可能会遇到两次错误
转变发生的一年。 (pytz 文档讨论了
这些问题更详细。)这可能对您来说并不重要
博客,但如果您对客户的账单过高或过低,就会出现问题
一小时,一年两次,每年。这个问题的解决办法是
在代码中使用 UTC,并且仅在与交互时使用本地时间
终端用户。
此外:
当启用时区支持时,Django 使用时区感知的日期时间对象。如果您的代码创建日期时间对象,他们也应该知道。在这种模式下,上面的例子就变成了:
import datetime
from django.utils.timezone import utc
now = datetime.datetime.utcnow().replace(tzinfo=utc)
模板中的时区感知输出当您启用时区支持时,
Django 将感知日期时间对象转换为当前时区
它们在模板中呈现。这与格式非常相似
本土化。
最后,无需猴子修补任何东西:https://docs.djangoproject.com/en/1.6/topics/i18n/timezones/#template-tags
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)