ブロックのデフォルトコンテンツを作成する方法はありますか?
このように機能するもの:
if extended:
show content from template extending it
else:
show this default content
ありがとう
ブロックのデフォルトコンテンツを作成する方法はありますか?
このように機能するもの:
if extended:
show content from template extending it
else:
show this default content
ありがとう
普通に使えますTemplate Inheritance
親(ベース)テンプレートのブロックを、デフォルトデータのコンテナーとして定義します。
これで、このテンプレートを拡張するときに、このブロックをどうするかを決めることができます。ブロックをオーバーライドしない場合、デフォルトのデータが表示されます。そうしないと、継承したテンプレートのブロックのデータが表示されます。
最後に{{ block.super }}
、ベースと継承されたテンプレートのコンテンツを混在させるオプションを提供します。
これは、親ブロックを完全にオーバーライドするのではなく、そのコンテンツに追加する場合に役立ちます。
たとえば、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 %}