2

私は Django 1.1 を使用しており、他のすべてのページが継承する基本テンプレートであるこのテンプレートを使用しています。次のナビゲーション バーのように、ほとんどすべての Web サイトで一定である一連のものを定義します。

        <div id="navbar">
        {% block navbar %}
            <a href="">Link 1</a>
            <a href="">Link 2</a>
            <a href="">Link 3</a>
            <a href="">Link 4</a>
            <a href="/admin/">Admin</a>
        {% endblock %}
    </div>

しかし、子テンプレート内での Django のデフォルトの動作は、子が親テンプレートのブロックを完全にオーバーライドすることです。ここにこのページがありますが、必ずしも navbar ブロックをオーバーライドする必要はありません。そのページに固有のエントリをいくつか追加するだけですが、今のところ、それが起こっていることを確認できる唯一の方法は、親から navbar ブロックをコピーし、それをテンプレート + 追加に含める必要がありました。他にできる方法はありますか?

4

4 に答える 4

7

子テンプレートで使用{{ block.super }}して、親ブロックのコンテンツを含めます。

于 2009-12-06T10:47:45.377 に答える
2

Alasdair が指摘し{{ block.super }}たように、親からの値を使用できます。

ただし、常にこれを行う必要がある場合は、ブロックが十分に細分化されているかどうかを検討する必要があります。各ブロックが必要なコンテンツのみを定義するように、それらをレイアウトできる必要があります。

于 2009-12-06T11:28:04.793 に答える
2

ネストされたブロックを定義できるため、次のようなこともできます。

    <div id="navbar">
            {% block navbar %}
                    <a href="">Link 1</a>
                    <a href="">Link 2</a>
                    <a href="">Link 3</a>
                    <a href="">Link 4</a>
                    <a href="/admin/">Admin</a>
                    {% block navbar-extra %}{% endblock %}
            {% endblock %}
    </div>

navbar 全体を上書きする必要があるテンプレートはそうすることができますが、他のテンプレートは単に「navbar-extra」ブロックを上書きするだけです。IMO これは、拡張性が必要な場所が事前にわかっている状況で {{ block.super }} を使用するよりも少しクリーンです。YMMV。

于 2009-12-06T17:39:50.817 に答える
0

すべてのブロックを定義する必要はないため、子ページで navbar ブロックを定義しない場合、親のブロック コンテンツが使用されます。

于 2009-12-06T10:42:47.850 に答える