Python Django模板不考虑不同时区中的日期时间
在我的Django应用程序中,我将所有DateTime对象存储为UTC中的aware对象。但我的用户可能生活在世界的不同地区。所以,我为他们建立了一个表格,让他们选择各自的时区。在后端,我编写了Python代码,首先使用Django的Python Django模板不考虑不同时区中的日期时间,python,html,django,datetime,Python,Html,Django,Datetime,在我的Django应用程序中,我将所有DateTime对象存储为UTC中的aware对象。但我的用户可能生活在世界的不同地区。所以,我为他们建立了一个表格,让他们选择各自的时区。在后端,我编写了Python代码,首先使用Django的astimezone()函数将相应的DateTime对象转换为本地时区。在用户的配置文件模型下有一个存储时区的属性。因此,我的所有代码实际上都将根据用户的本地时间执行操作,而在实际数据库中,它们存储为UTC。现在,我似乎遇到了一个问题,我不明白为什么会发生这种情况。
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是否启用
和不使用任何东西是一样的?谢谢,我想是这样的。您可以测试它,如果您愿意,请确认。干杯!祝您有个美好的一天!!