Как показать местное время пользователю в django?

Я разрабатываю приложение Django У меня есть модель, в которой временные метки добавляются автоматически. Я хочу показывать время конечным пользователям в соответствии с их местным часовым поясом.

Вот мой код:

settings.py

TIME_ZONE = 'UTC'

USE_I18N = True

USE_L10N = True

USE_TZ = True

model.py

date_created = models.DateTimeField(auto_now_add=True, null=True)

шаблон

{{object.date_created}}

Но он показывает время UTC Я хочу, чтобы он определял текущий часовой пояс пользователя и отображал дату и время соответственно.

Фреймворк Django предоставляет встроенный способ отображения местного времени для пользователя. Когда Django рендерит шаблон, он автоматически передает в него переменную {{ localtime }}. . Эта переменная содержит текущее местное время в часовом поясе пользователя.

Если вы хотите отобразить местное время в определенном формате, вы можете использовать фильтр шаблона Django |date: "FORMAT" . Например, чтобы отобразить местное время в формате "long", вы можете использовать следующий код:

{{ localtime|date: "l, F jS Y H:i" }}

Это выведет что-то вроде "Воскресенье, 1 января 2017 12:00".

Ваши данные хранятся в UTC, что хорошо. Когда вы получаете объект поля DateTime из базы данных, это будет наивный объект datetime.datetime. т.е. дата/время без привязки к часовому поясу. Затем вам предстоит выполнить преобразование.

Пользователи вашего webapp могут находиться в разных часовых поясах, поэтому для каждого запроса должно происходить преобразование в соответствующий часовой пояс. Вот почему существует функция activate для установки текущего часового пояса.

Если у вас установлен pytz, вы должны иметь возможность сделать следующее:

from django.utils.timezone import activate
activate(settings.TIME_ZONE)

Вывод поля даты в шаблонизаторе затем будет автоматически преобразовывать наивные объекты дата-время в правильный часовой пояс для отображения.

Если у вас есть только один наивный экземпляр datetime.datetime, для которого вы хотите установить часовой пояс, то просто используйте модуль pytz напрямую. Однако не следует делать это в представлениях, поскольку хорошей идеей является преобразование часового пояса только на этапе представления.

from pytz import timezone

settings_time_zone = timezone(settings.TIME_ZONE)
last_updated = last_updated.astimezone(settings_time_zone)
Вернуться на верх