Ich möchte den gleichen Inhalt in 2 verschiedenen Basisdateien bereitstellen.
Also versuche ich das zu tun:
page1.html:
{% extends "base1.html" %}
{% include "commondata.html" %}
page2.html:
{% extends "base2.html" %}
{% include "commondata.html" %}
Das Problem ist, dass ich nicht beide Extends und Include verwenden kann. Gibt es eine Möglichkeit, das zu tun? Und wenn nicht, wie kann ich das oben genannte erreichen?
commondata.html überschreibt einen Block, der sowohl in base1.html als auch in base2.html angegeben ist
Dies dient dazu, dieselbe Seite sowohl im PDF- als auch im HTML-Format bereitzustellen, wobei die Formatierung geringfügig abweicht. Die obige Frage vereinfacht jedoch, was ich versuche, wenn ich eine Antwort darauf bekomme, wird dies mein Problem lösen.
quelle
Aus Django-Dokumenten:
Django greift also nicht nach Blöcken aus Ihrer commondata.html und weiß nicht, was mit gerendertem HTML außerhalb von Blöcken zu tun ist.
quelle
Dies sollte den Trick für Sie tun: Fügen Sie das include-Tag in einen Blockabschnitt ein.
page1.html:
page2.html:
quelle
Weitere Informationen darüber, warum es bei mir nicht funktioniert hat, falls es zukünftigen Menschen hilft:
Der Grund, warum es nicht funktioniert hat, ist, dass {% include%} in Django keine Sonderzeichen wie ausgefallene Apostrophe mag. Die Vorlagendaten, die ich einschließen wollte, wurden aus Word eingefügt. Ich musste alle diese Sonderzeichen manuell entfernen und dann erfolgreich einschließen.
quelle
Sie können keine Blöcke aus einer enthaltenen Datei in eine untergeordnete Vorlage ziehen, um die Blöcke der übergeordneten Vorlage zu überschreiben. Sie können jedoch ein übergeordnetes Element in einer Variablen angeben und die Basisvorlage im Kontext angeben.
Aus der Dokumentation :
Anstatt "page1.html" und "page2.html" zu trennen, setzen Sie
{% extends base_template %}
oben in "commondata.html". Definieren Sie dann in Ihrer Ansichtbase_template
entweder "base1.html" oder "base2.html".quelle
Als Referenz für zukünftige Personen hinzugefügt, die dies über Google finden: In solchen Fällen sollten Sie sich das von der Mezzanine-Bibliothek bereitgestellte Tag {% overextend%} ansehen.
quelle
Edit 10th Dec 2015 : Wie in den Kommentaren erwähnt, ist ssi seit Version 1.8 veraltet. Laut Dokumentation:
Meiner Meinung nach ist die richtige (beste) Antwort auf diese Frage die von podshumok , da sie erklärt, warum das Verhalten von include zusammen mit der Vererbung verwendet wird.
Ich war jedoch etwas überrascht, dass niemand das ssi- Tag erwähnte, das vom Django-Template-System bereitgestellt wird, das speziell für Inline einschließlich eines externen Textes entwickelt wurde . Inline bedeutet hier, dass der externe Text nicht interpretiert, analysiert oder interpoliert wird, sondern einfach in die aufrufende Vorlage "kopiert" wird.
Weitere Informationen finden Sie in der Dokumentation (überprüfen Sie Ihre entsprechende Version von Django in der Auswahl unten rechts auf der Seite).
https://docs.djangoproject.com/de/dev/ref/templates/builtins/#ssi
Aus der Dokumentation:
Beachten Sie auch die Sicherheitsauswirkungen dieser Technik und die erforderliche ALLOWED_INCLUDE_ROOTS-Definition, die zu Ihren Einstellungsdateien hinzugefügt werden muss.
quelle