2012-06-02 72 views
16

django多個模板的繼承 - 這是正確的風格?

,所以我有一個base.html文件:

<html> 
    <body> 
     <div id="header"> ... </div> 
     {% block main %}{% endblock %} 
     <div id="footer"> ... </div> 
    </body> 
</html> 

,我也有一個頁面,顯示用戶帖子:

{% extends base.html %| 
{% block main%} 
    <h1>welcome to yours posts hangout!</h1> 

     ... snazzy code here that shows all the posts ... 

{% endblock%} 

現在的問題是,也許我還有一個這樣的頁面:

{% extends base.html %| 
{% block main%} 
    <h1>look at all posts by all users!</h1> 

     ... snazzy code here that shows all the posts by all the users ... 

{% endblock%} 

因爲我們都屬於mensa,我們可以看到我有重複的時髦代碼 - 兩次(爲重言式的樂趣!)

我不想重複此代碼 - 我的意思是,如果它將是一個主要的麻煩,我會,但除此之外,我會就像一個頁面有時髦的代碼定義,然後滑動上面和(可能)在它下面的小變化。

我對模板的理解是搖搖欲墜 - 雖然我認爲這是要做到這一點的方式,有沒有更好的/標準化的方法?

snazzy.html:

{% extends base.html %| 
    {% block aboveSnazzy%} 
    {% endblock %} 

     ... snazzy code here that shows all the posts by all the users ... 

    {% block belowSnazzy%} 
    {% endblock %} 
{% endblock%} 

,然後每個不同的塊,我可以有:

usersArea.html:

{% extends snazzy.html %| 
    {% block aboveSnazzy%} 
     <h1>welcome to yours posts hangout!</h1> 
    {% endblock %} 


    {% block belowSnazzy%} 
     <h1>i didn't think this far ahead in the example</h1> 
    {% endblock %} 
{% endblock%} 

等等等等對於其它片太!

好的,所以我知道我可以發送一個帶有不同標題的參數或者你有什麼 - 讓我們假裝上面的那些模糊的東西是,我不知道,顯示一些其他的模板我想要做什麼或做些什麼不平凡的。我在上面詳述的「方式」上做了什麼?

乾杯!

回答

19

呦。 :-)

答案取決於你的模板有多少共同點。

  • 如果你的模板有共同的多,例如他們是你的網站的某些部分的頁面,或者只是很普通的strucure,您所描述的方式是最好的。製作另一個基本模板,添加更多的塊並繼承它的形式。我只是覺得你應該多用一些描述性的名稱爲塊,例如

    {% extends base.html %| 
    {% block page_heading %}{% endblock %} 
        ... snazzy code here that shows all the posts by all the users ... 
    {% block extra_content %}{% endblock %} 
    
  • ,如果你的模板不具有共同的玉米粥,但股價的內容一些具體的塊,這是另一種情況。這裏很難做出適當的繼承結構。因此,您可以在此處使用{% include %}:例如,製作另一個顯示帖子的模板(顯示所有帖子的時髦代碼),例如_list_posts.html。 您可以製作另一個顯示帖子的模板(顯示所有帖子的時髦代碼),例如_list_posts.html。然後在兒童模板中使用它。

    {% extends base.html %| 
    {% block main%} 
    <h1>welcome to yours posts hangout!</h1> 
    {% include '_list_posts.html' %} 
    {% endblock%} 
    

    您也可以使用inclusion tag

哪種方式可供選擇?試着回答這個問題:可以(而且應該)這兩個模板有共同的祖先?如果是的話,去第一個變體,如果沒有 - 第二個變體。

+0

謝謝!我不知道包含/包含標籤。我會看看他們! – bharal