15

我想知道是否有办法从客户端自动检索用户的时区。特别是在登录期间。

我尝试在登录页面中添加它(使用auth.login):

{% get_current_timezone as TIME_ZONE %}

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

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

tz始终是服务器的时区。

4

5 回答 5

14

我进一步简化了它,你可以在这里插入:https ://github.com/Miserlou/django-easy-timezones 或 http://gun.io/blog/django-easy-timezones/

于 2013-07-17T09:21:04.223 回答
13

文档中:

选择当前时区

当前时区相当于翻译的当前语言环境。但是,Django 无法使用 Accept-Language HTTP 标头来自动确定用户的时区。相反,Django 提供了时区选择功能。使用它们来构建对您有意义的时区选择逻辑。

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

于 2012-04-19T20:13:44.703 回答
9

昨天我正在四处寻找相同的东西。最后,我最终根据 BluesRockAddict 的建议将 Django 应用程序放在一起(即使用 getTimezoneOffset):

https://github.com/adamcharnock/django-tz-detect

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

于 2013-06-20T08:38:56.483 回答
2

django 有一个不错的 APP 可以激活时区https://pypi.python.org/pypi/django-visitor-information-middleware/0.1.0。其中有两个中间件

时区中间件

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

访客信息中间件

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

country - 访问者所在的国家/地区。

city - 访问者所在的城市

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

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

user.timezone - 当前认证用户的时区

user.unit_system - 当前认证用户的单位系统。

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

Note: Location of the user is determined based on the user's IP address.
于 2014-04-08T13:12:31.217 回答
1

我目前创建了一个中间件类(遵循 Django 的文档),我在其中依赖 MaxMind geoip 数据库(http://dev.maxmind.com/geoip/legacy/geolite)和 GeoDjango (https://docs.djangoproject.com/en /1.5/ref/contrib/gis/)检索用户的国家代码,然后使用 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_timezones返回给定国家/地区可用的时区集合,所以我基本上选择返回的第一个。

IPResolver是我写在上面的个人实用类django.contrib.gis.utils.GeoIP

于 2013-06-20T09:14:02.810 回答