2010-12-31 6 views
1

Dies wurde fast sicher schon einmal hier gefragt, also Entschuldigung, wenn es ein Duplikat ist. Ich kann jedoch die Antwort nicht finden :)Django: effizienter in Ansichten oder Vorlagen zu berechnen?

In Django, ist es im Allgemeinen effizienter, Berechnungen in der Ansicht oder in der Vorlage zu tun?

Hier ist ein einfaches Beispiel. Ich möchte eine bestimmte Zeichenfolge in die Vorlage einfügen, abhängig vom Wert einer Ganzzahl. Ich könnte es in views.py:

# in views.py 
description = "small" 
if count > 10: 
    description = "large" 
elif count > 5: 
    description = "medium" 

Oder ich könnte in der Vorlage es auf diese Weise tun:

# in template.html 
{{ count }} 
({% if count > 10 %}large 
{% else %} 
{% if count > 5 %}medium{% else %}small{% endif %} 
{% endif %}) 

In diesem Fall wird der Code ist deutlich einfacher in Aussicht, so vielleicht das beantwortet meine Frage Aber was ich wirklich wissen möchte ist, ob es einen Unterschied macht, ob es in der Vorlage oder in der Ansicht funktioniert?

Antwort

2

Es hängt davon ab, was Sie effizient meinen.

Die frühere Version beinhaltet weniger Funktionsaufrufe, da, wenn Logik in einer Vorlage enthalten ist, die Strings zuerst in Knoten analysiert und vor der Ausführung in Token zerlegt werden müssen.

Die Leistung der beiden wird jedoch in einem realen Kontext identisch sein, da sie beide sehr einfach sind. Eine breitere Interpretation der Effizienz würde die Wartbarkeit von Code umfassen, der im Allgemeinen besser lesbar und einfacher zu refaktorieren ist, wenn er in der Ansicht (oder im Modell, wo zutreffend) enthalten ist.

In jeder Interpretation ist es am besten, so viel Logik wie möglich aus der Vorlage und in Ansicht, Controller oder TemplateTags zu verschieben.

2

Ich würde nicht sagen, dass dies eine Frage der Effizienz ist, aber mehr von wo der Code passt mit einem MVC like pattern. Wenn das alles über ist, wie etwas anzuzeigen und nicht was die Vorlage ist ein geeigneter Ort für sicher. Wenn Sie sagen, dass Sie ändern, was angezeigt wird, ist die Ansicht der geeignetere Ort!

Wenn Sie sagen würden, dass diese Werte stark an das Modell gebunden sind, könnten Sie auch eine Methode für das Modell erstellen, das Sie innerhalb der Vorlage aufrufen. Wenn Sie an anderen Stellen die gleiche Funktionalität benötigen, könnte es auch sinnvoll sein, hierfür eine custom template tag zu erstellen!

Aber denken Sie daran, dass django isn't so strict about dealing with the original MVC pattern, und z. Templatetags ziehen eine Menge Funktionalität in die Vorlage ein!