Frage Kombinieren mehrerer Django-Vorlagen in einer einzigen Anfrage


Ich frage mich, ob jemand mir helfen kann, den besten Ansatz für das folgende Problem herauszufinden. Ich baue eine Webanwendung, die Django-Templating verwendet, um ihre Web-UI-Komponente zu erstellen. Es gibt eine Reihe gängiger HTML-Elemente wie Kopf- / Fußzeile, HTML-Kopf, Masthead usw. Ich möchte diese einmal kodieren und sie mit anderen Templates "einbinden / kombinieren", die die Kernfunktionalität der Anwendung darstellen.

Ist dies mit Django Templates möglich? Wenn ja, wie könnte ich das erreichen?


16
2018-01-20 09:57


Ursprung


Antworten:


Du kannst Djangos benutzen extends Etikett. Angenommen, Sie hatten eine Kopf- und Fußzeile. Du könntest eine Vorlage erstellen, die heißt foo.django:

<h1>My HTML Header</h1>
<!-- an so on -->

{% block content %}
{% endblock %}

<!-- html footer -->

Dann können Sie eine andere Vorlage erstellen, z. B. bar.django:

{% extends "foo.django" %}

{% block content %}
This overrides the content block in foo.django.
{% endblock %}

... die dann rendern wird:

<h1>My HTML Header</h1>
<!-- an so on -->

This overrides the content block in foo.django.

<!-- html footer -->

Es gibt gute Anleitungen zu Django-Vorlagen bei http://www.djangobook.com/de/1.0/chapter04/.


35



Das {% extends %} und {% include %} Methoden eignen sich für Seitenelemente, die im Kontext keine zusätzlichen Informationen benötigen.

Sobald Sie mehr Daten in den Kontext aus der Datenbank einfügen müssen, sind Vorlagen-Tags nützlich. Als ein Beispiel, der contrib.comments App mit Django enthalten definiert a {% get_comment_list %} Schablonentag zum Abrufen von Kommentaren, die an eine bestimmte Modellinstanz angehängt sind. Hier ist, wie Sie es verwenden würden:

<div>
{% load comments %}
{% get_comment_list for my_instance as comment_list %}
{% for comment in comment_list %}
  <p><a href="{{ comment.url }}">{{ comment.name }}</a> wrote:</p>
  {{ comment.comment }}
{% endfor %}
</div>

Sie könnten dies in einer separaten Vorlage speichern und {% include %} es in anderen Vorlagen.

Für Ihre eigenen Inhalte können Sie Ihre eigenen benutzerdefinierten Vorlagen-Tags schreiben. Folgen die Dokumentation. Wann immer es möglich ist, ist es praktisch, Tags mit dem zu schreiben einfaches Tag Mechanismus. Sie finden praktische vordefinierte Vorlagen-Tags auf djangosnippets.org und das Blogosphäre.


13



Probieren Sie die {% include %} Etikett.

http://docs.djangoproject.com/de/dev/ref/templates/builtins/#include


4