2014-04-23 13 views
5

Podczas używania Django i Jinja2 wydaje się, że obiekty datetime nie zostaną automatycznie przekonwertowane na lokalną strefę czasową, nawet jeśli USE_TZ=True. Zamiast tego wartość pozostaje w UTC.Wyświetlanie czasu lokalnego za pomocą DateTimeFields w szablonach Jinja2 - Django

Udało mi się rozwiązać ten problem, tworząc filtr, który uruchamia localtime() na wartości.

Jednak nie jestem pewien, jak to samo zrobić z DateTimeFields. W szablonie mam {{ field }}, gdzie pole to DateTimeField, ale nie ma gdzie umieścić filtru.

Jaki jest najlepszy sposób przekonwertowania wartości DateTimeField na bieżącą strefę czasową?

+0

Kto jest obecna strefa czasowa? Serwer lub przeglądarka internetowa? – user590028

+0

Strefa czasowa serwera zwrócona przez 'timezone.get_current_timezone()' – user3033028

+0

Ahh..Sprawdź ten link http://stackoverflow.com/questions/14657173/get-local-timezone-in-django – user590028

Odpowiedz

4

Na szczęście jest to stosunkowo łatwa łatka. Django zapewnia funkcję o nazwie template_localtime że (zgodnie z dokumentacją) ma następujące brzmienie: „Sprawdza, czy wartość jest datetime i konwertuje go na czas lokalny, jeśli to konieczne”

Wystawianie tego na szablony Jinja2 obejmuje utworzenie filtru szablonów lub funkcji globalnej. Ten przykład pokazuje, jak:

from django.utils.timezone import template_localtime 

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

można następnie wykorzystać je w szablonie Jinja2 następująco:

{{ item.date|localtime }} 
{{ localtime(item.date) }} 
Powiązane problemy