django的用户时区自动检测
django-tz-detect的Python项目详细描述
此应用程序将使用javascript自动检测用户的时区,然后 相应地配置django的时区本地化系统。作为一个 结果,显示给用户的日期将在其本地时区中。
作者是Adam Charnock,还有一些伟大的contributors。
工作原理
在第一个页面视图中,您应该发现tz_detect放置了 使用 插入的模板标记。脚本将获取用户的gmt 使用getTimezoneOffset偏移,并将其发回django。这个 偏移量存储在用户的会话和django的时区感知中 在中间件中配置。
javascript将不会在以后的请求中显示。
安装
从github签出tz_detect,或使用pip安装:
pip install django-tz-detect
将tz_detect添加到INSTALLED_APPS:
INSTALLED_APPS+=('tz_detect',)
确保有django.template.context_processors.request处理器
TEMPLATES=[{...'OPTIONS':{'context_processors':[...'django.template.context_processors.request',],},},]
更新您的urls.py文件:
urlpatterns+=[url(r'^tz_detect/',include('tz_detect.urls')),]
将检测模板标记添加到站点中,理想情况下是在基本布局中的</body>标记之前:
{%loadtz_detect%}{%tz_detect%}
将TimezoneMiddleware添加到MIDDLEWARE:
importdjangoMIDDLEWARE+=('tz_detect.middleware.TimezoneMiddleware',)ifdjango.VERSION<(1,10):MIDDLEWARE_CLASSES+=('tz_detect.middleware.TimezoneMiddleware',)
(可选)配置应用程序最常用的国家/地区:
# These countries will be prioritized in the search# for a matching timezone. Consider putting your# app's most popular countries first.# Defaults to the top Internet using countries.TZ_DETECT_COUNTRIES=('CN','US','IN','JP','BR','RU','DE','FR','GB')
请参阅example应用程序。此应用程序用于手动 测试此软件包的功能。这也是一个好的 例子。
你只需要django 1.8或更高版本就可以运行它。可能会用老的 版本,但未经测试。
注意事项
- Django的时区感知功能在第一页视图中不可用
- 此方法需要javascript
- 时区检测完全从用户的GMT偏移量进行,而不是从其位置进行
未来扩张
- 允许对用户存储时区的挂钩
- 允许手动指定时区
- 改进时区检测
- 可以选择使用HTML5的位置API来更好地确定时区