Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 模板Django中datetime时区感知对象的错误转换_Python_Django_Datetime - Fatal编程技术网

Python 模板Django中datetime时区感知对象的错误转换

Python 模板Django中datetime时区感知对象的错误转换,python,django,datetime,Python,Django,Datetime,我有两个datetime对象,其时区分别为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 D

我有两个datetime对象,其时区分别为
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>)

我肯定是做错了什么,有什么想法吗?

这对我来说也是一件新鲜事,因为我刚刚发现了这一点。因此,我添加这个作为一个答案

来自Django文档:

启用时区支持时,Django会在模板中呈现aware datetime对象时将其转换为当前时区


什么是当前时区? 同样,从文档:

默认时区是由
时区
设置定义的时区

当前时区是用于渲染的时区

您应该使用
activate()
当前时区设置为最终用户的实际时区。否则,将使用默认时区


解决方案: 只需调用
时区。在渲染之前激活视图中的
方法,Django将在您设置的任何时区中渲染时间

import pytz
from django.utils import timezone

def my_view(...):

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

    render(...)
要在单个渲染中显示多个时区,请执行以下操作: 您可以使用或覆盖模板特定部分中的时区:

{% load tz %}

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

<!-- Using the tag -->
{% timezone "Europe/Berlin" %}
    Berlin time: {{ value }}
{% endtimezone %}
{%load tz%}
{{value}时区:“欧洲/巴黎”}
{%时区“欧洲/柏林”%}
柏林时间:{{value}}
{%endtimezone%}

如果用python打印值(在将值传递到模板之前),您得到了什么值?如果我在将datetime对象传递到模板之前打印它,它将返回
2019-06-11 10:20:00+02:00
“欧洲/柏林”datetime对象,因此如果我理解正确,您希望在时间
UTC+1
上显示这些对象?我希望使用datetime对象中反映的正确时间来显示它们。看看我的第一个对象
datetime.datetime(2019、6、11、10、20…
应显示上午10:20,但它是not@Cyzanfar:您是否在
设置.py中将
使用设置设置为
True
?如果我想在一个模板中显示两个不同的时区,该怎么办?再次参考航班搜索示例OK cool。我很好奇他们为什么要设计这个是的。应该有一个合理的理由,但我现在没有看到。@Cyzanfar有一个
时区
和,你可以用它覆盖模板特定部分的时区。是的,我看到了。我试图避免这样做,但我想这是我现在唯一的选择。谢谢你的回答:)
{% load tz %}

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

<!-- Using the tag -->
{% timezone "Europe/Berlin" %}
    Berlin time: {{ value }}
{% endtimezone %}