2012-06-02 1 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%} 

私たちはすべてメンサに属しているため、私が持っているすてきなコードが繰り返されている - 2回(反復的な楽しみのために)

私はこのコードを繰り返すことを望んでいない - 私はそれが大した手間であるとすれば、 snakeyコードが定義された1ページのように、上記の小さな変更を(おそらく)下に滑らせてください。

テンプレートの私の理解は不安ですが - これはやっていると思いますが、より良い/標準化された方法がありますか?

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

などなど、他の作品のためにあまりにも!

大丈夫ですので、別のヘッダーでパラメータを送信することができます。または、あなたは何を持っているのでしょうか?aboveSnazzyのものが私には分かりません。自明ではない。私はそれを行う "方法"の上に詳述したものですか?

乾杯!

答えて

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を使用することもできます。

いずれの選択方法がありますか?質問に答えてみてください:これらの2つのテンプレートは共通の祖先を持つことができますか?はいの場合は、最初のバリエーションに進みます(2番目のバリエーションがない場合)。

+0

ありがとうございました!私はinclude/inclusionタグについて知らなかった。私はそれらを見てみましょう! – bharal

関連する問題