django - 对如何根据本地用户时间定制日期时间模板表示感到困惑

时间:2012-04-11 20:13:32

标签: django django-templates timezone django-views pytz

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

有人建议我应该在视图中看到这一点,而不是试图在模板中执行此操作。我不确定。

非常感谢任何帮助。

谢谢!

1 个答案:

答案 0 :(得分: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中。