2014-04-23 17 views
5

Wenn Sie Django und Jinja2 verwenden, werden datetime Objekte nicht automatisch in die lokale Zeitzone konvertiert, selbst wenn USE_TZ=True. Stattdessen bleibt der Wert in UTC.Anzeigen der lokalen Zeit mit DateTimeFields in Jinja2-Vorlagen - Django

Ich konnte dies lösen, indem Sie einen Filter erstellen, der localtime() auf den Werten läuft.

Allerdings bin ich mir nicht sicher, wie man das gleiche mit DateTimeFields macht. In der Vorlage habe ich {{ field }}, wo Feld ist die DateTimeField, aber es gibt keinen Ort, um einen Filter zu setzen.

Was ist der beste Weg, Werte in die aktuelle Zeitzone zu konvertieren?

+0

Wer aktuelle Zeitzone ist? Der Server oder der Webbrowser? – user590028

+0

Die Zeitzone des Servers wird von 'timezone.get_current_timezone()' – user3033028

+0

zurückgegeben Ahh..Check out this link http://stackoverflow.com/questions/14657173/get-local-timezone-in-django – user590028

Antwort

4

Zum Glück ist dies eine relativ einfache Lösung. Django bietet eine Funktion namens template_localtime, dass (nach der Dokumentation) führt Folgendes aus: „Prüft, ob ein Wert Datumzeit ist und wandelt sie in die lokale Zeit bei Bedarf“

Wenn Sie dies den Vorlagen von Jinja2 aussetzen, müssen Sie entweder einen Vorlagenfilter oder eine globale Funktion erstellen. Dieses Beispiel zeigt beides:

from django.utils.timezone import template_localtime 

env = Environment(**kwargs) 
env.filters.update({ 
    'localtime': template_localtime, 
}) 
env.globals.update({ 
    'localtime': template_localtime, 
}) 

Anschließend können Sie diese in einer Jinja2 Vorlage verwenden, wie folgt:

{{ item.date|localtime }} 
{{ localtime(item.date) }} 
Verwandte Themen