为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进行更好的时区确定
项目详情
下载文件
下载适合您的平台的文件。如果您不确定选择哪个,请了解有关 安装包 的更多信息。