2017-04-12 4 views
0

Ich zeige ein Datum auf einer Django-Vorlage an, und ich habe eine Python-Funktion, die das Datum heute für mich formatiert und an meine Vorlage weiterleitet.Ist es besser, Django Template-Tags zu verwenden oder Variablen aus Python zu übergeben?

# function [format example: Wednesday 01 February 10:00:00] 
def today(): 
    date_now = datetime.now() 
    day_number = date_now.strftime("%d") 
    month_name = date_now.strftime("%B") 
    day_name = date_now.strftime("%A") 
    time = date_now.strftime("%X") 
    date = "{} {} {} {}".format(day_name, day_number, month_name, time) 
    return date 

# view 
def myview(request): 
    the_date_today = today() 
    context = { 
     "the_date_today": the_date_today, 
    } 
    return render(request, "template.html", context) 

# template 
<h1>{{ the_date_today }}</h1> 

Ich habe gerade eine Möglichkeit, dies mit Tags Django-Vorlage nur zu tun.

# view 
def myview(request): 
    the_date_today = datetime.now() 
    context = { 
     "the_date_today": the_date_today, 
    } 
    return render(request, "template.html", context) 

# template 
<h1>{{ the_date_today|date:"l m F H:i" }}</h1> 

Was ist der bessere Ansatz dafür? Es ist viel weniger Code, nur Vorlagenfilter zu verwenden, aber macht dies alles langsamer?

+1

Template Filter werden Ihre App jede langsamer. Hinter den Kulissen sind das sowieso Python-Funktionen. Am besten ist es, die Präsentation in den Templates zu halten. Daher würde ich empfehlen, dafür die Standard-Django-Template-Filter zu verwenden. – dentemm

Antwort

3

Die Template-Methode ist besser. Es wird nicht langsamer sein.

Wenn Sie später das Anzeigeformat ändern müssen, ändern Sie einfach die Vorlage, nicht den Code.

Was mehr ist, Sie brauchen nicht einmal den Wert für the_date_today auf die Vorlage übergeben, da Sie now in der Vorlage nennen können:

<h1>{% now "l d F H:i" %}</h1> 
+0

Das ist super danke, viel aufgeräumter :) –

+0

@RuthYoung: Kein Problem. Übrigens denke ich, dass der Datumsformat-String "" sein sollte, wobei das "m" (Monat des Jahres) durch "d" (der Tag des Monats) ersetzt wird. – mhawke

Verwandte Themen