21

だから私は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回繰り返されていることがわかります(トートロジーの楽しみのために!)

私はこのコードを繰り返したくありません-つまり、それが大きな問題になる場合はそうしますが、そうでない場合は、洗練されたコードが定義された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%}

他の作品も等々!

わかりました。別のヘッダーまたは何を持っているかを指定してパラメーターを送信できることを知っています。上記のSnazzyのものが、私が望む他のテンプレートを表示したり、重要なことをしたりしているとしましょう。それを行うための「方法」の上に私が詳述したことはありますか?

乾杯!

4

1 に答える 1

28

よ。:-)

答えは、テンプレートの共通点によって異なります。

  • テンプレートに多くの共通点がある場合、つまり、テンプレートがサイトの一部のセクションのページである場合、または非常に共通の構造を持っている場合、それを行う方法は正しいでしょう。ブロックにはもっとわかりやすい名前を使うべきだと思います。

    {% 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、それを子テンプレートで使用します。

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

    そのために包含タグを使用することもできます。

では、どのオプションを選択する必要がありますか?質問に答えてみてください:これらの2つのテンプレートには共通の親が必要ですか?はいの場合は、最初のオプションを選択してください。それ以外の場合は、2番目のオプションを選択してください。

于 2012-06-02T07:44:24.077 に答える