Python django 1.4如何自动获取用户';s来自客户端的时区

Python django 1.4如何自动获取用户';s来自客户端的时区,python,django,timezone,Python,Django,Timezone,我想知道是否有一种方法可以从客户端自动检索用户的时区。尤其是在登录时 我试图在登录页面中添加此内容(使用auth.login): 然后将其添加到登录表单中 <input type="hidden" name="next" value="/redirect/?tz={{ TIME_ZONE }}"> 但是tz始终是服务器的时区。来自: 选择当前时区 当前时区是 与翻译的当前区域设置等效。然而,这是不可能的 相当于Django可以用来 自动确定用户的时区。相反,Django提供 时

我想知道是否有一种方法可以从客户端自动检索用户的时区。尤其是在登录时

我试图在登录页面中添加此内容(使用
auth.login
):

然后将其添加到登录表单中

<input type="hidden" name="next" value="/redirect/?tz={{ TIME_ZONE }}">

但是
tz
始终是服务器的时区。

来自:

选择当前时区

当前时区是 与翻译的当前区域设置等效。然而,这是不可能的 相当于Django可以用来 自动确定用户的时区。相反,Django提供 时区选择功能。使用它们来建立时区 对您有意义的选择逻辑


您可以尝试使用函数通过javascript设置时区cookie,或者尝试执行一些geoip魔术并按位置显示时区。可能最可靠的方法是直接询问用户,并将此信息保存在用户配置文件/会话中。

我昨天正在四处寻找sam。最后,我按照上面BluesRockAddict的建议(即使用getTimezoneOffset)组装了一个Django应用程序:


我希望有人会觉得这很有用。

我目前创建了一个中间件类(遵循Django的文档),其中我依靠MaxMind geoip数据库()和GeoJango()检索用户的国家代码,然后使用pytz动态设置时区:

class TimezoneMiddleware(object):


    def __getUserTimeZone(self, request):
        info = IPResolver(request).getGeoInfo()
        return pytz.country_timezones[info['country_code']][0]


    def process_request(self, request):
        try:
            tz = self.__getUserTimeZone(request)
            timezone.activate(tz)
            logger.debug('Time zone "%s" activated' % str(tz))
        except Exception as e:
            logger.error('Unable to set timezone: %s' % str(e))
pytz.country\u timezones
返回给定国家的可用时区集合,因此我基本上选择返回的第一个时区


IPResolver
是我在
django.contrib.gis.utils.GeoIP

之上编写的一个个人实用程序类,我对其进行了进一步简化,您可以在此插入: 或
django有一个很好的应用程序可以激活时区。哪个有两个中间件

时区多媒体软件

中间件为经过身份验证的用户激活时区

访问信息中间件

此中间件将以下键添加到request.visitor字典:

国家-访客所在的国家

城市-访客所在的城市

location.timezone-位置访问者中使用的时区基于

location.unit_system-位置访问者中使用的单位系统基于

user.timezone—当前已验证用户的时区

user.unit_system-当前已验证用户的单位系统

cookie_notice-如果应为当前访问者显示cookie同意通知,则为True

Note: Location of the user is determined based on the user's IP address.

另一篇文章对此进行了详细的讨论(并进行了争论)。值得注意的是,pip提供了这一点,并且有逐步的说明。几分钟后我就让它工作了。谢谢有关于性能影响的想法吗?特别是在响应时间方面。django-easy-timezones使用了一个过时的数据库,不再可供下载。改用django easy timelines redux。在尝试“geoip magic”之前,请看一下@Rich的答案——我只花了几分钟就安装并配置了他的插件。对性能影响有什么想法吗?特别是在响应时间方面。
Note: Location of the user is determined based on the user's IP address.