Muster vorlage erbverzicht

Der Namespace.attr-Accessor des Namespace-Objekts ermöglicht den Zugriff auf Ineineradtordeklarierte Variablen auf Modulebene. Durch den Zugriff auf self.attr können Sie auf reguläre Attribute aus der Vererbungskette zugreifen, wie in den Abschnitten „%! %> deklariert. Wie z. B.: Während also das Tag „%block>“ die Einschränkung der verschachtelten Blöcke hebt, die extern nicht verfügbar sind, fügt es die Einschränkung hinzu, dass alle Blocknamen in einer einzelnen Vorlage innerhalb der Vorlage global eindeutig sein müssen und dass ein „%block>“ nicht innerhalb eines .%def> definiert werden kann. Es handelt sich um ein eingeschränkteres Tag, das für einen spezifischeren Anwendungsfall geeignet ist als „%def>“. Ein Vorteil für dieses Entwurfsmuster ist, dass Sie einfach die Dinge des gesamten Klassenuntergrunds ändern können, indem Sie einfach von abstrakten Klassen erben und die Vorlagenparametr füllen. Wo oben, parent.mako gibt die Erbstruktur an, an der child.mako teilnehmen soll. partials.mako definiert nur defs/blocks, die pro Name verwendet werden können. Das würde zu einer gerenderten Vorlage wie dieser führen: Die erbende Vorlage kann entweder oder beide von Header und Titel benennen, getrennt oder selbst geschachtelt: Um dieses Layout zu erweitern, erstellen Sie eine neue Datei und verwenden Sie die Extends-Direktive mit einem Pfad zur übergeordneten Vorlage.

(Wenn keine Dateierweiterung angegeben ist, wird .pug automatisch an den Dateinamen angehängt.) Definieren Sie dann einen oder mehrere Blöcke, um den übergeordneten Blockinhalt zu überschreiben. base.html rendert dann den oberen Teil eines HTML-Dokuments und ruft dann den Block „%block name=“header“> auf. Es ruft die zugrunde liegende header()-Funktion aus einem integrierten Namespace namens self auf (dieser Namespace wurde zuerst im Kapitel Namespaces in self eingeführt). Da index.html die oberste Vorlage ist und auch einen Block namens header definiert, wird letztlich dieser Headerblock ausgeführt – anstelle des Headers, der in base.html vorhanden ist. Alle String-Literwerden werden ohne automatisches Entweichen in die Vorlage eingefügt – sie tun so, als ob sie alle durch den sicheren Filter geleitet würden. Die Begründung dafür ist, dass der Vorlagenautor die Kontrolle darüber hat, was in das Zeichenfolgenliteral geht, sodass er sicherstellen kann, dass der Text beim Schreiben der Vorlage korrekt mit Escapezeichen versehen wird. Warum sollten Sie es deaktivieren? Da Vorlagenvariablen manchmal Daten enthalten, die als unformatiertes HTML gerendert werden sollen, möchten Sie in diesem Fall nicht, dass deren Inhalt mit Escapezeichen versehen wird. Sie können z. B. ein Blob von HTML in Ihrer Datenbank speichern und diese direkt in Ihre Vorlage einbetten.

Oder Sie verwenden das Vorlagensystem von Django, um Text zu erzeugen, der nicht HTML ist – wie z. B. eine E-Mail-Nachricht. Technisch gesehen, wenn das Vorlagensystem auf einen Punkt trifft, versucht es die folgenden Suchschritte in dieser Reihenfolge: Sie können auch Ihre eigenen benutzerdefinierten Vorlagenfilter erstellen; siehe Benutzerdefinierte Vorlagen-Tags und Filter. Betrachten wir nun den anderen vererbungsspezifischen Namespace, das Gegenteil von next called parent. parent ist der Namespace der Vorlage, der unmittelbar vor der aktuellen Vorlage liegt. Was an diesem Namespace nützlich ist, ist, dass defs oder Blocks ihre überschriebenen Versionen aufrufen können. Dies ist nicht so schwer, wie es klingt und ist sehr ähnlich wie die Verwendung des super Schlüsselwort in Python. Lassen Sie uns index.html ändern, um die Liste der Auswahlen zu erweitern, die von der Symbolleistenfunktion in layout.html bereitgestellt werden: So verstehe ich es, dass benutzermit der Superklasse als Vorlagenparameter Benutzern von A die Auswahl einer Superklasse beim Instanziieren eines Objekts von A ermöglicht. Erstellen Sie individuelle Vorlagen für jede Seite und erstellen Sie jede die entsprechende Abschnittsvorlage. Beispielsweise würde die Seite „Index“ etwas in der Nähe von blog/index.html.twig genannt werden und die tatsächlichen Blogbeiträge auflisten.

Auch hier betonen wir, dass dieses Verhalten standardmäßig aktiviert ist. Wenn Sie das Vorlagensystem von Django verwenden, sind Sie geschützt. Beachten Sie am Ende des Sidebar-Blocks in Ihrer neuen pages.twig-Vorlage eine Twig parent()-Funktion, diese optionale Ergänzung zu einem untergeordneten Block teilt Twig mit: „Put the parent block es HTML here!“. Warum eine textbasierte Vorlage anstelle einer XML-basierten (wie Zopes TAL) verwenden? Wir wollten, dass Djangos Vorlagensprache für mehr als nur XML/HTML-Vorlagen verwendet werden kann.