Angenommen, ich habe eine Vorlage
<html>
<div>Hello {{name}}!</div>
</html>
Während des Testens ist es hilfreich, den Wert der Variablen zu definieren, ohne den Python-Code zu berühren, der diese Vorlage aufruft. Also suche ich so etwas
{% set name="World" %}
<html>
<div>Hello {{name}}!</div>
</html>
Gibt es so etwas in Django?
django
django-templates
Alexis
quelle
quelle
Erstellen Sie ein Vorlagen-Tag:
Die App sollte enthalten
templatetags
Verzeichnis, auf dem gleichen Niveau wiemodels.py
,views.py
usw. Wenn dies nicht bereits vorhanden ist , erstellen Sie es - nicht das vergisst__init__.py
Datei das Verzeichnis , um sicherzustellen , wird als ein Python - Paket behandelt.Erstellen Sie eine Datei mit dem Namen
define_action.py
innerhalb des templatetags Verzeichnis mit dem folgenden Code:Hinweis: Der Entwicklungsserver wird nicht automatisch neu gestartet. Nach dem Hinzufügen des
templatetags
Moduls müssen Sie Ihren Server neu starten, bevor Sie die Tags oder Filter in Vorlagen verwenden können.Dann können Sie in Ihrer Vorlage dem Kontext folgende Werte zuweisen:
quelle
add
:{% define counter|add:1 as counter %}
. Ähnliches gilt für andere Operationen.Eine alternative Möglichkeit, bei der Sie nicht alles in den Block "with" einfügen müssen, besteht darin, ein benutzerdefiniertes Tag zu erstellen, das dem Kontext eine neue Variable hinzufügt. Wie in:
Auf diese Weise können Sie Folgendes in Ihre Vorlage schreiben:
Beachten Sie, dass das meiste davon von hier übernommen wurde
quelle
Es gibt Tricks wie den von John beschriebenen; Die Vorlagensprache von Django unterstützt jedoch nicht das Festlegen einer Variablen ( Vorlagen finden Sie im Feld "Philosophie" in der Django-Dokumentation ).
Aus diesem Grund , die empfohlene Methode , eine Variable zu ändern , ist die Python - Code über berühren.
quelle
Die beste Lösung hierfür ist das Schreiben eines benutzerdefinierten
assignment_tag
. Diese Lösung ist sauberer als die Verwendung eineswith
Tags, da eine sehr klare Trennung zwischen Logik und Stil erreicht wird.Erstellen Sie zunächst eine Vorlagen-Tag-Datei (z. B.
appname/templatetags/hello_world.py
):Jetzt können Sie das
get_addressee
Vorlagen-Tag in Ihren Vorlagen verwenden:quelle
Vielleicht war der
default
Vorlagenfilter 2009 keine Option ...quelle
{% with state=form.state.value|default:other_context_variable %}
stattother_context_variable
wir auch alle können'string_value'
auchDies ist im Allgemeinen keine gute Idee. Führen Sie die gesamte Logik in Python aus und übergeben Sie die Daten zur Anzeige an die Vorlage. Die Vorlage sollte so einfach wie möglich sein, um sicherzustellen, dass sich diejenigen, die am Design arbeiten, auf das Design konzentrieren können, anstatt sich um die Logik zu kümmern.
Wenn Sie beispielsweise abgeleitete Informationen in einer Vorlage benötigen, ist es besser, diese in eine Variable im Python-Code zu übernehmen und sie dann an die Vorlage weiterzugeben.
quelle
Verwenden Sie die with-Anweisung .
Ich kann den Code im ersten Absatz dieser Antwort nicht implizieren . Möglicherweise hatte die Vorlagensprache das alte Format veraltet.
quelle
In Ihrer Vorlage können Sie Folgendes tun:
In Ihren Template-Tags können Sie ein Tag wie folgt hinzufügen:
quelle