Неправильное преобразование объекта с указанием даты и времени в шаблоне Django - PullRequest
0 голосов
/ 09 июня 2019

У меня есть 2 объекта даты и времени с часовым поясом Europe/Berlin и US/Eastern, которые я изначально установил с помощью pytz.

datetime.datetime(2019, 6, 11, 10, 20, tzinfo=<DstTzInfo 'Europe/Berlin' CEST+2:00:00 DST>)

datetime.datetime(2019, 6, 11, 12, 16, tzinfo=<DstTzInfo 'US/Eastern' EDT-1 day, 20:00:00 DST>)

Эти времена должны отображаться как 10:20 AM и 12:16 PM соответственно.

Однако в моем шаблоне django они разные, например:

{{ value.departure_time.date_time|time:'f A'}} # >> 8:20 AM instead of 10:20AM

Я, должно быть, делаю что-то не так, очевидно, есть мысли?

1 Ответ

1 голос
/ 09 июня 2019

Это тоже что-то новое для меня, так как я только что узнал об этом.Следовательно, я добавляю это как ответ.

Из документов Django:

Когда вы включаете поддержку часового пояса, Django преобразует объекты осведомленной даты и времени в текущий часовой пояс , когда они отображаются в шаблонах.


Что такое текущий часовой пояс?

Опять же из документов:

Часовой пояс по умолчанию являетсячасовой пояс определяется настройкой TIME_ZONE.

Текущий часовой пояс - это часовой пояс, используемый для рендеринга.

Вам следует установить текущее время зона до фактического часового пояса конечного пользователя с activate().В противном случае используется часовой пояс по умолчанию.


Решение:

Просто вызовите метод timezone.activate в своем представлении перед рендерингом, и Django отобразит время в любом часовом поясеВы устанавливаете.

import pytz
from django.utils import timezone

def my_view(...):

    tzname = pytz.timezon("Europe/Berlin")
    timezone.activate(pytz.timezone(tzname))

    render(...)

Для отображения нескольких часовых поясов в одном рендере:

Вы можете использовать timezone filter или timezoneтег для переопределения часового пояса в определенной части шаблона:

{% load tz %}

<!-- Using the filter -->
{{ value|timezone:"Europe/Paris" }}

<!-- Using the tag -->
{% timezone "Europe/Berlin" %}
    Berlin time: {{ value }}
{% endtimezone %}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...