Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/336.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模板不考虑不同时区中的日期时间_Python_Html_Django_Datetime - Fatal编程技术网

Python Django模板不考虑不同时区中的日期时间

Python Django模板不考虑不同时区中的日期时间,python,html,django,datetime,Python,Html,Django,Datetime,在我的Django应用程序中,我将所有DateTime对象存储为UTC中的aware对象。但我的用户可能生活在世界的不同地区。所以,我为他们建立了一个表格,让他们选择各自的时区。在后端,我编写了Python代码,首先使用Django的astimezone()函数将相应的DateTime对象转换为本地时区。在用户的配置文件模型下有一个存储时区的属性。因此,我的所有代码实际上都将根据用户的本地时间执行操作,而在实际数据库中,它们存储为UTC。现在,我似乎遇到了一个问题,我不明白为什么会发生这种情况。

在我的Django应用程序中,我将所有DateTime对象存储为UTC中的aware对象。但我的用户可能生活在世界的不同地区。所以,我为他们建立了一个表格,让他们选择各自的时区。在后端,我编写了Python代码,首先使用Django的
astimezone()
函数将相应的DateTime对象转换为本地时区。在用户的配置文件模型下有一个存储时区的属性。因此,我的所有代码实际上都将根据用户的本地时间执行操作,而在实际数据库中,它们存储为UTC。现在,我似乎遇到了一个问题,我不明白为什么会发生这种情况。在应用程序中,我制作了一个专用页面,向用户显示服务器时间和本地时间的比较。这是我的密码

查看呈现该页面的函数

def check_time(request):
    " A view function that let's user view their local time and server time (usually UTC) at a glance"
    user = User.objects.get(username=request.user.username)

    server_time = timezone.now()
    user_localtime = server_time.astimezone(user.profile.timezone)

    context = {
        "server_time": server_time,
        "user_localtime": user_localtime
    }

    return render(request, "ToDo/check_time.html", context=context)
检查_time.html

{% extends "ToDo/base.html" %}
{% load static %}
{% block content %}

<div class="content-section dark-mode-assist-section">
    <h1>Check if your local time is accurate</h1>
    <br><br>
    <h2>Server time: {{ server_time }}</h2>
    <h2>Your time: {{ user_localtime }}</h2>
</div>


{% endblock content %}
{%extensed“ToDo/base.html”%}
{%load static%}
{%block content%}
检查当地时间是否准确


服务器时间:{{Server\u time} 您的时间:{{user\u localtime}} {%endblock内容%}
情况就是这样:

这两个时间都是一样的。虽然我在将时间传递到模板之前已经转换了时间。为什么会发生这种错误

其他信息:

  • 我的
    USE_TZ
    已打开
  • 我的
    时区是“UTC”
  • 我的应用程序中没有当前时区的设置

鉴于您最后的评论,即
astimezone()
在您的
视图中工作正常。py
模板中似乎发生了错误。最有可能的情况是,它将所有时间转换为
UTC
时间,这可能是在
设置.py
时区中指定的时间

可以使用模板标记启用或禁用日期时间对象的转换:

{% load tz %}

{% localtime on %}
    {{ value }}
{% endlocaltime %}

{% localtime off %}
    {{ value }}
{% endlocaltime %} 

您还可以在
settings.py
中设置
TIME\u ZONE
USE\u TZ
来解决这个问题。

在您尝试的示例中,您要传递给
astimezone()函数的参数值是多少?您是否还确定用户未驻留在
UTC+-0
区域中?
astimezone()
函数不接受“US/Pacific”之类的字符串。因此,进入
astimezone()
的参数是一个tzinfo对象,它代表当前用户的本地时区。您也可以在我的第二点上澄清。至于第二点,所有用户的默认时区都是UTC。并且没有任何UTC+-0选项。我想这就是你要问的。因此,每个用户,如果没有另外设置,都有时区UTC。请放心,传递到模板的
user\u localtime
是用户选择的本地时区中的本地时间。我已经打印了这个变量,我看到它将用户的时间打印到控制台上。但Django模板奇怪地忽略了时区并以UTC显示。如果你能帮助我,我将不胜感激。非常感谢你的帮助。我非常感激。结果是使用
localtime off
有效。我认为这个模板标记忽略了到UTC的转换。不过我还有一个问题。由于使用
localtime off
不会将时间转换为UTC,因此
localtime是否启用
和不使用任何东西是一样的?谢谢,我想是这样的。您可以测试它,如果您愿意,请确认。干杯!祝您有个美好的一天!!