Ich möchte eine Zeichenfolge in einem Django-Vorlagen-Tag verketten, z.
{% extend shop/shop_name/base.html %}
Hier shop_name
ist meine Variable und ich möchte diese mit dem Rest des Pfades verketten.
Angenommen, ich habe shop_name=example.com
und ich möchte, dass sich das Ergebnis erweitert shop/example.com/base.html
.
django
django-templates
Ahsan
quelle
quelle
shop_name
, also ist es gefährlich.shop_name
bevor Sie es an den Kontext in einer Ansicht übergeben,get_context_data
stellen Sie sicher, dass es mitugettext
anstelle von übersetzt wirdugettext_lazy
.Nicht
add
für Zeichenfolgen verwenden, Sie sollten ein benutzerdefiniertes Tag wie folgt definieren:Erstellen Sie eine Datei:
<appname>\templatetags\<appname>_extras.py
und dann benutze es wie @Steven sagt
Grund zur Vermeidung
add
:Laut den Dokumenten
Wenn beide Variablen Ganzzahlen sind, ist das Ergebnis unerwartet.
quelle
add
" allein wird einfach nichtstr()
an erster Stelle verwendet und hat bei mir überhaupt nicht funktioniert , während Ihre Lösung einwandfrei funktioniert{% load <appname>_extras %}
Ich habe die Ordnerhierarchie geändert
und dann unten würde funktionieren.
Jetzt kann die base.html-Seite erweitert werden.
quelle
Siehe Verketten von Zeichenfolgen in Django-Vorlagen :
Für frühere Versionen von Django:
{{ "Mary had a little"|stringformat:"s lamb." }}
Sonst:
{{ "Mary had a little"|add:" lamb." }}
quelle
Schauen Sie sich den
add
Filter an .Bearbeiten: Sie können Filter verketten, damit Sie dies tun können
"shop/"|add:shop_name|add:"/base.html"
. Dies funktioniert jedoch nicht, da es an der Vorlage liegt, Filter in Argumenten auszuwerten, und erweitert dies nicht.Ich denke, Sie können dies nicht in Vorlagen tun.
quelle
Aus den Dokumenten:
Dieses Tag kann auf zwei Arten verwendet werden:
{% extends "base.html" %}
(mit Anführungszeichen) verwendet den Literalwert "base.html" als Namen der zu erweiternden übergeordneten Vorlage.{% extends variable %}
verwendet den Wert der Variablen. Wenn die Variable eine Zeichenfolge ergibt, verwendet Django diese Zeichenfolge als Namen der übergeordneten Vorlage. Wenn die Variable zu einem Vorlagenobjekt ausgewertet wird, verwendet Django dieses Objekt als übergeordnete Vorlage.Es scheint also, dass Sie keinen Filter verwenden können, um das Argument zu manipulieren. In der aufrufenden Ansicht müssen Sie entweder die Ahnenvorlage instanziieren oder eine Zeichenfolgenvariable mit dem richtigen Pfad erstellen und mit dem Kontext übergeben.
quelle
Die Antwort von @ error ist grundsätzlich richtig. Sie sollten hierfür ein Template-Tag verwenden. Ich bevorzuge jedoch ein etwas allgemeineres Vorlagen-Tag, mit dem ich ähnliche Vorgänge ausführen kann:
und dann können Sie es so in Ihrer Vorlage verwenden:
Wie im Kommentar erwähnt, ist dieses Vorlagen-Tag besonders nützlich für Informationen, die in einer Vorlage wiederholbar sind, jedoch Logik und andere Dinge erfordern, die Ihre Vorlagen beschädigen, oder in Fällen, in denen Sie Daten, die zwischen Vorlagen über Blöcke übertragen werden, wiederverwenden möchten:
und dann:
Die Gutschrift für das Captureas-Tag ist hier fällig: https://www.djangosnippets.org/snippets/545/
quelle
Ich fand die Arbeit mit dem
{% with %}
Tag ziemlich mühsam. Stattdessen habe ich das folgende Vorlagen-Tag erstellt, das für Zeichenfolgen und Ganzzahlen funktionieren soll.Laden Sie dann das Vorlagen-Tag oben in Ihre Vorlage wie folgt:
Sie können es dann folgendermaßen verwenden:
Ich persönlich fand es viel sauberer, damit zu arbeiten.
quelle
In Django-Vorlagen können Sie keine Variablen bearbeiten. Sie haben zwei Möglichkeiten: Schreiben Sie entweder Ihr eigenes Vorlagen-Tag oder tun Sie dies in der Ansicht.
quelle
extends
hat keine Möglichkeit dafür. Fügen Sie entweder den gesamten Vorlagenpfad in eine Kontextvariable ein und verwenden Sie diese, oder kopieren Sie das vorhandene Vorlagen-Tag und ändern Sie es entsprechend.quelle
Und mehrfache Verkettung:
Und in Vorlage:
quelle