Wenn ich in Djangos Templatesystem einen Block habe, den ich mit einer if-Anweisung optional machen möchte, wie mache ich das?
Ich habe das versucht:
%Vor%Aber das funktioniert nicht. Gibt es eine Möglichkeit, das zu tun, so dass für einen gegebenen Wert (in diesem Fall Null) der Block nicht ausgegeben wird und die Basisvorlage die ursprünglichen Werte verwendet?
Bearbeiten: Lass mich etwas genauer sein, damit es leichter zu beantworten ist.
Ich habe eine Seite mit 10 Einträgen pro Seite. Der Benutzer kann dann zur nächsten Seite gehen und die nächsten zehn Elemente sehen. Für jede weitere Seite, die sie gehen, nach der ersten, möchte ich, dass der Titel-Tag so etwas wie "Archiv 1" oder "Archiv 10" sagt, aber wenn sie zur ursprünglichen Seite zurückkehren, ist es nicht länger Archiv, und es sollte Gehe einfach zum ursprünglichen Site-Titel, der bereits in den Basis-Templates angegeben ist.
So weit ich verstehe block
s sind Platzhalter, die in den untergeordneten Vorlagen "überschrieben" werden sollen. Sie müssen zur "Kompilierzeit" und nicht zur "Laufzeit" definiert werden.
Was Ihr spezielles Problem betrifft, warum ändern Sie den Titel nicht anhand der Seitennummer (vorausgesetzt, Sie verwenden die Seitennummerierung)? Etwas wie das:
%Vor%Ich stieß auf ein ähnliches Problem mit einem Projekt, an dem ich gerade arbeite. Hier ist, wie ich es gelöst habe mit {{block.super}}, um den Standardwert aus dem übergeordneten Block zu ziehen:
Meine übergeordnete Vorlage enthält:
%Vor%Meine untergeordnete Vorlage enthält:
%Vor%* Hinweis: Möglicherweise möchten Sie den Code in {% spaceless%} {% endspaceless%} umbrechen, wenn Sie das Ergebnis in einem HTML-Title-Tag verwenden möchten.
(Es sieht so aus, als hätte Jordan Reiter die gleiche Lösung in den Kommentaren der ursprünglichen Frage ein wenig vor meiner Antwort gepostet.)
Ich würde nur zu den guten Antworten oben hinzufügen müssen, dass abhängig von der Django-Version manchmal der {{ block.super }}
den Inhalt vom Master zweimal legt, scheint dies zu sein geschehen in den neuesten Versionen von Django.
Ich benutze Django 1.8 und wann immer ich {{ block.super }}
einsetze, hat es sich so verhalten, nur als Ergänzung zur Jamie-Antwort kann ich sagen, dass du in der Basisvorlage den gewünschten Inhalt einfügen kannst
Und dann in dem Kind, wenn Sie möchten, dass die Fußzeile vererbt und angezeigt wird, tun Sie einfach nichts, was es sein wird. Wenn Sie aber nicht möchten, dass dieser Block angezeigt wird, fügen Sie das Tag wie folgt in das Kind mit leerem Inhalt ein:
%Vor%Dann wird es ausgeblendet, sobald es gerendert wurde. Sie können den Inhalt auch überschreiben, wenn Sie möchten.
Tags und Links django django-templates