2012-06-11 12 views
43

Mam bardzo podstawowy szablon (basic_template.html) i chcę wypełnić dane sformatowane przy użyciu innego szablonu częściowego. Plik basic_template.html może zawierać kilka elementów sformatowanych przy użyciu szablonu częściowego.Jak wstawić szablon do innego szablonu?

Jak skonstruować kod w views.py?

Powodem, dla którego to robię, jest to, że później zostanie wypełniony przy użyciu Ajax. Czy robię to dobrze?

Odpowiedz

88

można zrobić:

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

gdzie subtemplate.html jest inny szablon Django. W tym subtemplate.html można umieścić kod HTML, który można uzyskać za pomocą Ajax.

Można także szablon wiele razy:

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

przepraszam, zapomniałem wspomnieć: the subtemplate może być instancja kilka razy w basic_template.html – WindowsMaker

+0

Jest to również możliwe, można zawierać matrycę w dla pętli w szablonie, zobacz zaktualizowaną odpowiedź. –

+1

genialny! Dziękuję Ci! – WindowsMaker

14

Można to zrobić za pomocą blok. Bloki są znacznikami szablonu Django, które przesłonią sekcje szablonu, które rozszerzysz na . Dołączyłem przykład poniżej.

basic_template.html

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

szablon chcesz dołączyć: (tj example.html)

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

views.py:

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

Spowoduje to załadowanie basic_template.html, ale zastąp wszystko wewnątrz {% block 'body' %} {% endblock %} w basic_template.html z tym, co zawiera się w {% block 'body' %} {% endblock %}.

można przeczytać więcej na temat bloków i dziedziczenia szablonów w Django Docs

+0

Jaka jest różnica między zrobieniem tego sposób i robi {% include "main/includes/example.html"%}? –

+2

@MichaelLafayette, pomyśl o rozszerzeniu jako dziedziczenie, a dołącz jako import. – Mox

+0

Czy są jakieś zalety wydajności związane z używaniem jednego podejścia nad drugim? Podejście '{% include" main/includes/example.html "%}' wygląda na prostsze (potwierdza * KISS *). –

Powiązane problemy