2012-06-11 14 views
43

Ich habe eine sehr einfache Vorlage (basic_template.html) und möchte die Daten mit einer anderen partiellen Vorlage formatieren. Die basic_template.html könnte mehrere Dinge enthalten, die mit der partiellen Vorlage formatiert wurden.Wie fügen Sie eine Vorlage in eine andere Vorlage ein?

Wie soll ich den Code in views.py strukturieren?

Der Grund, warum ich das tue, ist, dass das später mit Ajax gefüllt wird. Mache ich das richtig?

Antwort

88

Sie tun können:

<div class="basic"> 
{% include "main/includes/subtemplate.html" %}  
</div> 

wo subtemplate.html andere Django-Vorlage ist. In diesem subtemplate.html können Sie den HTML-Code eingeben, der mit Ajax erhalten würde.

Sie können auch die mehrfach Vorlage:

<div class="basic"> 
{% for item in items %} 
    {% include "main/includes/subtemplate.html" %}  
{% endfor %} 
</div> 
+0

leider in der mehr über Blöcke und Vorlage Vererbung lesen, vergessen zu erwähnen: die Subtemplate vielleicht mehrmals in die basic_template.html – WindowsMaker

+0

das auch möglich ist instanziert werden, können Sie eine Vorlage in einem umfassen for-Schleife in der Vorlage, siehe die aktualisierte Antwort. –

+1

brilliant! Danke! – WindowsMaker

14

Sie können dies tun, um einen Block verwenden. Blöcke sind ein Django-Vorlagen-Tag, das Abschnitte einer Vorlage, die Sie erweitern möchten, überschreibt . Ich habe ein Beispiel unten eingefügt.

basic_template.html

<body> 
{% block 'body' %} 
{% endblock %} 
</body> 

Vorlage möchten Sie umfassen: (d example.html)

{% extends 'basic_template.html' %} 
{% block 'body' %} 
/* HTML goes here */ 
{% endblock %} 

views.py:

return render_to_response(template='example.html', context, context_instance) 

Dadurch wird geladen basic_template.html, aber ersetzen Sie alles innerhalb {% block 'body' %} {% endblock %} in basic_template.html mit allem, was in {% block 'body' %} {% endblock %} enthalten ist.

Sie können Django Docs

+0

Was ist der Unterschied zwischen tun es diese Weg und tun {% include "main/includes/example.html"%}? –

+2

@MichaelLafayette, denke an extend als erben, während als importieren enthalten. – Mox

+0

Gibt es Leistungsvorteile bei der Verwendung eines Ansatzes gegenüber dem anderen? Der Ansatz '{% include" main/includes/example.html "%}' sieht einfacher aus (er bestätigt * KISS *). –

Verwandte Themen