2009-01-02 22 views
16

我想知道是否有人可以幫助我找出解決以下問題的最佳方法。我正在構建一個使用Django模板構建Web UI組件的Web應用程序。有許多常見的HTML元素,例如頁眉/頁腳,HTML頭,標頭等。我想對這些代碼進行編碼,並將它們與代表核心應用程序功能的其他模板「包括/組合」。在單個請求中組合多個Django模板

這可能使用Django模板?如果是的話,我該如何去完成呢?

回答

35

您可以使用Django的extends標籤。假設你有一個頁眉和頁腳。你可以做一個模板,所謂的,比如說,foo.django:

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

{% block content %} 
{% endblock %} 

<!-- html footer --> 

然後,你可以讓另一模板,比如說,bar.django:

{% extends "foo.django" %} 

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

...然後將呈現:

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

This overrides the content block in foo.django. 

<!-- html footer --> 

在django模板http://www.djangobook.com/en/1.0/chapter04/上有很好的說明。

12

{% extends %}{% include %}方法適用於在上下文中不需要額外信息的頁面元素。

只要您需要在數據庫的上下文中插入更多內容,模板標籤就會變得方便。例如,Django附帶的contrib.comments app定義了一個{% get_comment_list %}模板標籤,用於檢索附加到給定模型實例的註釋。這裏是你將如何使用它:

<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> 

你可以在一個單獨的模板保存這一點,並{% include %}它在其他模板。

對於您自己的內容,您可以編寫自己的自定義模板標籤。按照the documentation。只要有可能,使用simple tag機制編寫標籤很方便。您可以在djangosnippets.orgblogosphere上找到方便的現成模板標籤。