为django自动检测用户时区
项目描述
此应用程序将使用JavaScript自动检测用户的时区,然后相应地配置Django的时区本地化系统。结果,显示给用户的日期将显示为他们的本地时区。
由Adam Charnock编写,以及一些优秀的贡献者。
工作原理
在第一次页面浏览时,您应该会发现 tz_detect 使用您插入的模板标签将一段异步JavaScript代码放入您的页面中。该脚本将使用 getTimezoneOffset 获取用户的GMT偏移量,并将其发送回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 += [ path('tz_detect/', include('tz_detect.urls')), ]
- 将检测模板标签添加到您的站点,理想情况下在基础布局的 </body> 标签之前。 - {% load tz_detect %} {% tz_detect %}
- 将 TimezoneMiddleware 添加到 MIDDLEWARE。 - import django MIDDLEWARE += ( 'tz_detect.middleware.TimezoneMiddleware', ) if django.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')
请参阅 示例 应用程序。该应用程序用于手动测试此包的功能。这也可以作为一个很好的示例。
您只需要Django 1.8或更高版本即可运行。它可能在旧版本上运行,但未经过测试。
注意事项
- Django的时区感知在第一次页面浏览时不可用。 
- 此方法需要JavaScript。 
- 时区检测完全基于用户的GMT偏移量,而不是他们的位置。 
未来扩展
- 一个钩子,允许将时区存储在用户处 
- 允许手动指定时区 
- 改进时区检测 
- 可选地使用HTML5的位置API进行更好的时区确定 
项目详情
下载文件
下载适合您的平台的文件。如果您不确定选择哪个,请了解有关 安装包 的更多信息。