Easy IP-based timezones for Django (>=1.7) based on MaxMind GeoIP, with IPv6 support.
-
Install django-easy-timezones
pip install django-easy-timezones
-
Add "easy-timezones" to your INSTALLED_APPS setting like this:
INSTALLED_APPS = ( ... 'easy_timezones', )
-
Add EasyTimezoneMiddleware to your MIDDLEWARE_CLASSES
MIDDLEWARE_CLASSES = ( ... 'easy_timezones.middleware.EasyTimezoneMiddleware', )
-
(Optionally) Add a path to the MaxMind GeoIP cities databases (direct link because I'm nice) in your settings file:
GEOIP_DATABASE = '/path/to/your/geoip/database/GeoLiteCity.dat' GEOIPV6_DATABASE = '/path/to/your/geoip/database/GeoLiteCityv6.dat'
-
Enable localtime in your templates.
{% load tz %} The UTC time is {{ object.date }} {% localtime on %} The local time is {{ object.date }} {% endlocaltime %}
-
Twist one up, cause you're done, homie!
You can also use signals to perform actions based on the timezone detection.
-
To hook into the Timezone detection event to, say, save it to the request's user somewhere more permanent than a session, do something like this:
from easy_timezones.signals import detected_timezone @receiver(detected_timezone, sender=MyUserModel) def process_timezone(sender, instance, timezone, **kwargs): if instance.timezone != timezone: instance.timezone = timezone instance.save()