Source code for polaris.middleware

import pytz
from django.utils import timezone


[docs]class TimezoneMiddleware: """ .. _timezones: https://docs.djangoproject.com/en/3.2/topics/i18n/timezones/ Adapted from the Django documentation on timezones_. It checks for a ``"timezone"`` key stored in the request session and uses it when rendering content returned in the response. Polaris includes a ``timezone.js`` script that detects the users' UTC offset and sends it to the server, which stores a timezone with that offset in the user's session. This script is automatically loaded if using a template that inherits from ``base.html``. However, there is a limitation with this approach. For users's without exising sessions, which are identified using a browser cookie, Polaris cannot detect the user's timezone prior to rendering the first page of content. This means that dates and times shown to on the first page to a new user will be in the default timezone specified in your project's settings. That is why Django's documentation recommends that you simply ask the user what timezone they would like to use instead of attempting to detect it automatically. If this approach is taken, simply save the specified timezone in the user's session under the ``"timezone"`` key after adding this middleware. """ def __init__(self, get_response): self.get_response = get_response def __call__(self, request): tzname = request.session.get("timezone") if tzname: timezone.activate(pytz.timezone(tzname)) else: timezone.deactivate() return self.get_response(request)