Django Многопользовательский часовой пояс
Я новичок в django и работаю над приложением, которое может хранить заметки пользователя и время напоминания. Я следовал документу Django (https://docs.djangoproject.com/en/3.2/topics/i18n/timezones/) и добавил TimezoneMiddleware в middleware, метод set_timezone и шаблон timezone. Но все еще не могу получить правильный часовой пояс пользователя, он всегда отображается как UTC.
Я не уверен, нужно ли что-то добавить во фронтенд? Потому что как в коде:
class TimezoneMiddleware:
def __init__(self, get_response):
self.get_response = get_response
def __call__(self, request):
tzname = request.session.get('django_timezone')
if tzname:
timezone.activate(pytz.timezone(tzname))
else:
timezone.deactivate()
return self.get_response(request)
кажется, что он должен получать информацию о часовом поясе из данных сессии, но я проверил, и там нет информации о часовом поясе.
Может ли кто-нибудь подсказать, что я мог упустить? Спасибо.
Создайте промежуточное программное обеспечение:
class TimezoneMiddleware(object):
def __init__(self, get_response):
self.get_response = get_response
def __call__(self, request):
if request.user.is_authenticated:
tz_str = request.user.country.code
if tz_str:
time_zone_countries = pytz.country_timezones(tz_str)
for time_zone_l in time_zone_countries:
timezone.activate(pytz.timezone(time_zone_l))
else:
timezone.deactivate()
else:
timezone.deactivate()
response = self.get_response(request)
return response
Требования:
- pytz
- django-countries .
- В модели User добавьте этот объект:
country = CountryField()