2011-05-03 49 views
2

我正在建立一個網站,其中包含一個獨特的主頁設計(主頁有一個不同於所有其他頁面的標題和徽標安排)。不過,我希望有一個基礎模板,它可以減少冗餘。在Django中具有獨特主頁佈局的網站模板

-base.html 
    -basehome.html (inherits from base.html) 
    -basesecond.html (inherits from base.html) 
    -about.html (inherits from basesecond.html) 
    -etc... 

所以base.html包含html聲明和結構。 Basehome.html和basesecond.html包含不同的標題結構和網站上從Basesecond.html繼承的各種其他頁面。

所以我不斷遇到的問題是,它似乎需要把塊放在一個塊內,以處理顯然包含(最遠的)子模板的主體內容。據我所知,Django不會讓你這樣做。

base.html--

<html> 
    <head> 
     <title>Mysite</title> 
    </head> 
    <body id="{% block bodyholder %}{% endblock %}"> 
     <div id="hd">{# start of hd #} 
      {% block hd %}{% endblock %} 
     </div>{# end of the hd #} 
     <div id="bd">{# start of body #} 
      {% block bd %}{% endblock %} 
     </div>{# end of body #}    
    </body> 
</html> 

basehome.html--

{% extends "base.html" %} 

{% block bodyholder %}bodyhome{% endblock %} 

{% block hd %} 
    big logo and wide header 
{% endblock %} 

{% block bd %} 
    homepage body content 
    this part works just like I want it to. 
{% endblock %} 

basesecond.html--

{% extends "base.html" %} 

{% block bodyholder %}bodysecond{% endblock %} 

{% block hd %} 
    small logo and narrow header 
{% endblock %} 

{% block bd %} 
    second page body content 
    here is where I want to put extra blocks like 
    {% block unique about page sidebar %}{% endblock %} 
    but it breaks the template system 
{% endblock %} 

什麼是解決這個問題的最好方法是什麼?

+0

什麼問題?這與您所描述的完全相同。 – 2011-05-03 23:04:07

+1

事實上,在Django模板中沒有像這樣嵌套塊的問題。你有錯誤嗎? – 2011-05-04 01:11:00

+0

用Django模板記住的一件事是,子模板中包含的塊可以*重寫*或*擴展*父模板中的塊。有時候,我已經在子模板中放置了塊,這些子模板是空的,以覆蓋父塊,從而不必在每個子模板上​​添加代碼。模板系統非常靈活。我認爲你可以把你的側邊欄塊放在父模板中,只填充到你的「關於」頁面上,沒有任何問題。 – Brandon 2011-05-04 03:33:41

回答

4

如果你使用,你需要重新寫一小部分,你已經證明什麼:

,而不是這個

{% block unique about page sidebar %}{% endblock %} 

與此

{% block unique %}{% endblock %} 
{% block about %}{% endblock %} 
{% block page %}{% endblock %} 
{% block sidebar %}{% endblock %} 

否則更換,一切看起來都應該起作用。什麼錯誤代碼或行爲,你看到你不期待?