0

ブロックのデフォルトコンテンツを作成する方法はありますか?

このように機能するもの:

if extended:
   show content from template extending it
else:
   show this default content

ありがとう

4

2 に答える 2

2

普通に使えますTemplate Inheritance

親(ベース)テンプレートのブロックを、デフォルトデータのコンテナーとして定義します。

これで、このテンプレートを拡張するときに、このブロックをどうするかを決めることができます。ブロックをオーバーライドしない場合、デフォルトのデータが表示されます。そうしないと、継承したテンプレートのブロックのデータが表示されます。

最後に{{ block.super }}、ベースと継承されたテンプレートのコンテンツを混在させるオプションを提供します。

これは、親ブロックを完全にオーバーライドするのではなく、そのコンテンツに追加する場合に役立ちます。

于 2012-05-01T08:22:41.463 に答える
0

たとえば、django / template/defaulttags.py内の組み込みタグの実装を確認してくださいautoescape

# in autoescape()
# get content from current autoecape to pairing endautoescape
nodelist = parser.parse(('endautoescape',))

# in AutoEsacpeControlNode.render()
# render inner content
output = self.nodelist.render(context)

したがって、カスタマイズしたタグに次のようなものを記述します

def render(self, context):
    ...
    if extend:
        return default_content
    else:
        return self.nodelist.render(context)

通常if... elseはトリックも行います...:

{% if extended %}
...
{% else %}
{{ default }}
{% endif %}
于 2012-05-01T05:12:37.940 に答える