Wie kann {% erweitert '…'%} an Bedingungen geknüpft werden? - Django

68

Ich möchte eine Vorlage zwischen AJAX- und regulären HTTP-Aufrufen freigeben. Der einzige Unterschied besteht darin, dass eine Vorlage mit der HTML-Datei base.html bereitgestellt werden muss, die andere ohne.

Irgendeine Idee?

RadiantHex
quelle

Antworten:

85

Verwenden Sie eine Variable.

{% extends base_template %}

und setzen Sie es in Ihrer Ansicht auf "base.html" in Ihrer Ansicht oder auf eine neue "ajax.html" -Datei, die nur den Block und nichts anderes bereitstellt.

Daniel Roseman
quelle
3
Ein Problem: Dies unterbricht die Offline-Komprimierung des Django-Kompressors.
Ken Kinder
129

Für die anderen Antworten müssen Sie eine zusätzliche Kontextvariable übergeben. Solange Sie jedoch auf das Anforderungsobjekt zugreifen können, besteht keine Notwendigkeit:

{% extends request.is_ajax|yesno:"app/base_ajax.html,app/base.html" %}

Ich fand das viel bequemer.

Grausam
quelle
Gibt es eine Möglichkeit, {% block 'someblock' %}auf ähnliche dynamische Weise aufzunehmen?
Agconti
Super praktisch, wir testen A / B und führen eine neue Benutzeroberfläche ein, und die variable Route würde eine Menge Arbeit verursachen. Sie verdienen den grünen Scheck, da dies die Frage beantwortet.
Marc
Dies löst das Problem der Offline-Komprimierung des Django-Kompressors.
Theo Kouzelis
@TheoKouzelis Wie löst es das Komprimierungsproblem? Nach meinem Verständnis wird in diesem Fall django-compressorein Cache für den app/base.htmlFall erstellt, jedoch nicht für den Fall, der app/base_ajax.htmlbeim Versuch, die zwischengespeicherte Vorlage zu laden, fehlschlägt (kein Schlüssel im generierten Offline-Manifest).
InterDist
28
{% extends override_base|default:'base.html' %}

Ps Ich weiß, dass dies eine alte Frage ist, aber ich habe sie gefunden, als ich nach einer Antwort gesucht habe. Vielleicht hilft es jemand anderem mit dem gleichen Problem.

Räuber
quelle