django-tz-detect を使う。 (ソースコードはこちら)
2019年にリリースされたオープンソースライブラリで、MITライセンス適用済。
<実行環境>
Python:3.7.4 Django:2.2.17
###1.ライブラリのインストール
pip install django-tz-detect
###2.setting.pyを編集
####INSTALLED_APPSの末尾に以下を追加
setting.py
INSTALLED_APPS (
'tz_detect',#追加
)
####TEMPLATESに'django.template.context_processors.request'
があるか確認(なければ追加)
setting.py
TEMPLATES = [
{
...
'OPTIONS': {
'context_processors': [
...
'django.template.context_processors.request',#なければ追加
],
},
},
]
####MIDDLEWAREの末尾にtz_detect.middleware.TimezoneMiddleware
を追加
setting.py
MIDDLEWARE = (
'tz_detect.middleware.TimezoneMiddleware',#追加
)
###3.url を追加する
urls.py
urlpatterns = [
url(r'^tz_detect/', include('tz_detect.urls')),#追加
]
###4.HTMLの編集
####先頭に{% load tz_detect %}
、bodyタグ内に{% tz_detect %}
を追加
この時、{% tz_detect %}
は読み込みの関係で</body>の直前に記述するのが望ましい。
base.html
{% load tz_detect %}
<head></head>
<body>
{% tz_detect %}
</body>
タイムゾーンの設定を変更して、ブラウザを上げなおして完成。
(反映まで1~2分かかることもある)