2

我是一个 django 新手,几天来一直在看这个时区的东西,我仍然很困惑。我现在有一个以 UTC 格式存储在 postgres 数据库中的时区感知日期时间值。但是,当我在模板上将它呈现给用户时,我希望它在用户的时区中呈现。我在模型中有一个指定用户时区的字段,我可以通过视图中的 field = request.user.get_profile() 获取它(我正在使用 django 配置文件)。但是我仍然不确定如何在模板中使用它来显示用户的本地时间。我试过 {{ value.date_time_field | timezone=field.timezone }} 但这不起作用。

有人建议我应该在视图中解决此问题,而不是尝试在模板中执行此操作。我不知道。

任何帮助是极大的赞赏。

谢谢!

4

1 回答 1

3

Django 终于在 1.4 版本中获得了时区功能。尽管您想确保已安装 pytz。

所有日期时间值都将作为 UTC 存储在数据库中。当您在模板中显示日期时间值时,它将被本地化为“活动”时区。默认情况下,除非您激活其他内容,否则它将使用设置文件中的 TIME_ZONE 设置。

如果你想激活另一个时区,只需调用 timezone.activate。例如:

from django.utils import timezone
timezone.activate('US/Pacific')

如果您想自动执行此操作,只需编写一个自定义中间件:

from django.utils import timezone

class TimezoneMiddleware(object):
    def process_request(self, request):
        timezone.activate(request.user.get_profile().timezone)

然后确保将您的 TimezoneMiddleware 包含在 settings.py 的 MIDDLEWARE_CLASSES 中。

于 2012-04-11T20:19:07.323 回答