我正在尝试使用Django Timezone中间件,这是我从官方文档中获取的,但它似乎不起作用。
我有这样一个middleware.py文件:
import pytz
from django.utils import timezone
class TimezoneMiddleware:
def __init__(self, get_response):
self.get_response = get_response
def __call__(self, request):
tzname = request.session.get('django_timezone')
print('DJANGO TIMEZONE', tzname)
if tzname:
timezone.activate(pytz.timezone(tzname))
else:
timezone.deactivate()
return self.get_response(request)
当我将"tzname“输出到控制台时,它被设置为None,这肯定是问题所在,但是为什么没有设置它呢?
我的设置文件有以下内容:
USE_TZ = True
TIME_ZONE = "UTC"
MIDDLEWARE = [
'django.middleware.security.SecurityMiddleware',
'django.contrib.sessions.middleware.SessionMiddleware',
'corsheaders.middleware.CorsMiddleware',
'django.middleware.common.CommonMiddleware',
'django.middleware.csrf.CsrfViewMiddleware',
'django.contrib.auth.middleware.AuthenticationMiddleware',
'django.contrib.messages.middleware.MessageMiddleware',
'django.middleware.clickjacking.XFrameOptionsMiddleware',
'myproject.middleware.TimezoneMiddleware',
]
我的模板如下所示:
{% load tz %}
{% get_current_timezone as TIME_ZONE %}
{{ TIME_ZONE }}
{% localtime on %}
<p>{{ room.open_date }}</p>
{% endlocaltime %}
结果是{{ room.open_date }将显示在UTC中。{{ TIME_ZONE }}显示“UTC”。我尝试过在设置中不使用TIME_ZONE设置。我相信我已经根据文档实现了它,但显然我遗漏了一些东西。我的Django版本是Django版本3.2.5。
有人能帮忙吗。我的目标是在浏览器拥有的时区中显示日期。
发布于 2022-10-05 09:09:09
对不起,我不能把我的答案作为一个评论,我做了这个答案,对我有用,我希望它能帮助你。
根据文档,会话的细节是必须设置它,或者如果要获得时区,必须通过表单向用户请求。在我看来,这个解决方案是一种自动的方法。
https://stackoverflow.com/questions/68521694
复制