django 1.4 cómo obtener automáticamente la zona horaria del usuario del cliente

Me gustaría saber si hay una manera de recuperar automáticamente la zona horaria del usuario desde el cliente. Especialmente durante el inicio de sesión.

Intenté agregar esto en la página de inicio de sesión (usando auth.login ):

 {% get_current_timezone as TIME_ZONE %} 

y luego agregar esto en el formulario de inicio de sesión

  

pero tz es siempre la zona horaria del servidor.

Related of "django 1.4 cómo obtener automáticamente la zona horaria del usuario del cliente"

De la documentación :

Selección de la zona horaria actual

La zona horaria actual es el equivalente de la configuración regional actual para las traducciones. Sin embargo, no hay un equivalente del encabezado HTTP Accept-Language que Django podría usar para determinar la zona horaria del usuario automáticamente. En su lugar, Django proporciona funciones de selección de zona horaria. Úsalos para construir la lógica de selección de zona horaria que tenga sentido para ti.

Puede intentar configurar la cookie de la zona horaria a través de javascript utilizando la función getTimezoneOffset o intentar hacer algo de magia geoip y calcular la zona horaria por ubicación. Probablemente, la forma más confiable sería preguntar directamente al usuario y guardar esta información en el perfil / sesión del usuario.

Lo he simplificado aún más, y puedes conectarlo aquí: https://github.com/Miserlou/django-easy-timezones o http://gun.io/blog/django-easy-timezones/

Ayer estuve buscando lo de Sam. Al final, terminé armando una aplicación Django para lo que BluesRockAddict sugiere arriba (es decir, usa getTimezoneOffset):

https://github.com/adamcharnock/django-tz-detect

Espero que alguien lo encuentre útil.

Hay una buena aplicación para que django active la zona horaria https://pypi.python.org/pypi/django-visitor-information-middleware/0.1.0 . Que tiene dos middleware

TimezoneMiddleware

El middleware activa una zona horaria para un usuario autenticado.

VisitanteInformaciónMiddleware

Este middleware agrega las siguientes claves al diccionario request.visitor:

país – país en que se encuentra el visitante.

ciudad – ciudad en la que se encuentra el visitante

location.timezone: la zona horaria utilizada en la ubicación del visitante se basa en

location.unit_system: el sistema de unidades utilizado en la ubicación del visitante se basa en

user.timezone: zona horaria del usuario autenticado actualmente

user.unit_system – sistema unitario del usuario autenticado actualmente.

cookie_notice: es cierto si se debe mostrar un aviso de consentimiento de cookie para el visitante actual.

 Note: Location of the user is determined based on the user's IP address. 

Actualmente creé una clase de middleware (siguiendo la documentación de Django) en la que confío en la base de datos de geoip de MaxMind ( http://dev.maxmind.com/geoip/legacy/geolite ) y GeoDjango ( https://docs.djangoproject.com/en /1.5/ref/contrib/gis/ ) para recuperar el código de país del usuario y luego establecer la zona horaria dinámicamente usando pytz:

 class TimezoneMiddleware(object): def __getUserTimeZone(self, request): info = IPResolver(request).getGeoInfo() return pytz.country_timezones[info['country_code']][0] def process_request(self, request): try: tz = self.__getUserTimeZone(request) timezone.activate(tz) logger.debug('Time zone "%s" activated' % str(tz)) except Exception as e: logger.error('Unable to set timezone: %s' % str(e)) 

pytz.country_timezones devuelve una colección de zonas horarias disponibles para el país en pytz.country_timezones , así que básicamente elijo la primera que se devuelve.

IPResolver es una clase de utilidad personal que escribí sobre django.contrib.gis.utils.GeoIP