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?

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.


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.


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.


Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.