django - запутался в том, как адаптировать представление шаблона даты и времени к локальному времени пользователя

Я новичок в django и уже несколько дней смотрю на этот часовой пояс, и я все еще в замешательстве. Теперь у меня есть значение даты и времени с учетом часового пояса, хранящееся в базе данных postgres в формате UTC. Однако, когда я представляю его пользователю в шаблоне, я хочу, чтобы он был представлен в часовом поясе пользователя. У меня есть поле в модели, которое указывает часовой пояс пользователя, и я могу получить его через field = request.user.get_profile() в представлении (я использую профили django). Но я все еще не уверен, как использовать его в шаблоне, чтобы показать местное время пользователя. Я попробовал {{ value.date_time_field | timezone=field.timezone }} но это не работает.

Кто-то предложил мне получить это в представлении, а не пытаться сделать это в шаблоне. Я не уверен.

Любая помощь приветствуется.

Спасибо!


person mb52089    schedule 11.04.2012    source источник


Ответы (1)


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 в MIDDLEWARE_CLASSES в settings.py.

person dgel    schedule 11.04.2012