【问题标题】:Django Multiple User TimezoneDjango 多用户时区
【发布时间】:2022-01-03 06:32:34
【问题描述】:

我是 django 新手,正在开发一个可以存储用户笔记和提醒时间的应用程序。我遵循了 Django 文档(https://docs.djangoproject.com/en/3.2/topics/i18n/timezones/) 并将 TimezoneMiddleware 添加到中间件、set_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)

似乎应该从会话数据中获取时区信息,但我检查过,那里没有时区信息。

有人会建议我可能会错过什么吗?谢谢。

【问题讨论】:

    标签: python django timezone


    【解决方案1】:

    创建中间件:

    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
    

    要求:

    【讨论】:

    • 谢谢!只是想知道是否可以根据用户当前时区获取时区,而无需将时区信息保存到表中?
    • 是的,我已经添加了所有这些。但仍然无法获得除 UTC 之外的时区。不过谢谢。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-06-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-11-06
    • 2012-02-03
    相关资源
    最近更新 更多