2012-06-11 82 views
43

我有一個非常基本的模板(basic_template.html),並希望用另一個部分模板格式化數據來填充。 basic_template.html可能包含使用部分模板格式化的幾件事情。如何將模板插入另一個模板?

我應該如何在views.py中構造代碼?

我這樣做的原因是後來會用Ajax填充。我做對了嗎?

回答

88

你可以這樣做:

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

其中subtemplate.html是另一個Django的模板。在這個subtemplate.html中,您可以放入通過Ajax獲取的HTML。

還可以包括模板多次:

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

對不起塊和模板繼承,忘了提:在子模板會被實例化多次到basic_template.html – WindowsMaker

+0

這也是可能的,您可以在一個模板for循環模板中,請參閱已更新的答案。 –

+1

輝煌!謝謝! – WindowsMaker

14

您可以使用塊做到這一點。塊是一個Django模板標籤,它將覆蓋您在擴展的模板部分。我已經在下面加入了一個例子。

basic_template.html

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

模板要包括:(即example.html的)

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

views.py

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

這樣做會加載basic_template.html,但將basic_template.html中的{% block 'body' %} {% endblock %}中的所有內容替換爲{% block 'body' %} {% endblock %}中包含的所有內容。

你可以閱讀更多有關Django Docs

+0

這樣做有什麼區別方式和做{%include「main/includes/example.html」%}? –

+2

@MichaelLafayette,包括作爲導入的時候,把延伸看作繼承。 – Mox

+0

使用其中一種方法是否有任何性能優勢? '{%include'main/includes/example.html「%}'方法看起來更簡單(肯定* KISS *)。 –