[英]Wrong conversion of datetime timezone aware object in template Django
我有 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:20AM 和 12:16PM。
但是,在我的 Django 模板中,它們是不同的,例如:
{{ value.departure_time.date_time|time:'f A'}} # >> 8:20 AM instead of 10:20AM
我肯定做錯了什么,有什么想法嗎?
這對我來說也是新事物,因為我剛剛發現了這一點。 因此,我將此添加為答案。
來自 Django 文檔:
當您啟用時區支持時,Django 會將感知的日期時間對象在模板中呈現時轉換為當前時區。
再次,來自文檔:
默認時區是由
TIME_ZONE
設置定義的時區。當前時區是用於渲染的時區。
您應該使用
activate()
將當前時區設置為最終用戶的實際時區。 否則,將使用默認時區。
渲染前只需在視圖中調用timezone.activate
方法,Django 將在您設置的任何時區渲染時間。
import pytz
from django.utils import timezone
def my_view(...):
tzname = pytz.timezone("Europe/Berlin")
timezone.activate(pytz.timezone(tzname))
render(...)
您可以使用timezone
過濾器或timezone
標簽來覆蓋模板特定部分中的時區:
{% load tz %}
<!-- Using the filter -->
{{ value|timezone:"Europe/Paris" }}
<!-- Using the tag -->
{% timezone "Europe/Berlin" %}
Berlin time: {{ value }}
{% endtimezone %}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.