2016-05-19 6 views
1

ここで何かが見つからないかもしれませんが、コンテキストがインクルードに渡されてもDjangoがこれを許可しないという特別な理由がありますか? blockincludeにレンダリングすることは、(読みやすさのために)有用であるようです。なぜなら、Angularがディレクティブを使用する方法に似たマークアップの密度を低くするからです。Djangoはブロック内のブロックを許可しないのはなぜですか?

これを実現する別のテンプレートタグはありますか?


例。 下の画像では、navbarはサイト全体ですが、navbar2はビューに依存し、付属のcontent.html内にあります。これは、スケルトンにすべてのブロックをロードしていないので、よりきれいなマークアップを可能にします...しかし、残念ながらそれは動作しません。

Basic Admin Dashboard

base.html

<html> 
    <head> 
    ... 
    </head> 
    <body> 
     <nav> 
      {% block navbar %} 
      {% endblock %} 
     </nav> 

     {% include "content.html" %} 

     {% include "footer.html" %} 
    </body> 
</html> 

content.html

<header>{{ request.view_name }}</header> 

<nav> 
    {% block navbar2 %} 
    {% endblock %} 
</nav> 

{% block content %} 
{% endblock %} 

モデルするlist.html

{% extends "base.html" %} 

{% block navbar2 %} 
    {% for action in view_actions %} 
     <li>{{ action }}</li> 
    {% endfor %} 
{% endblock %} 

答えて

2

includeはベースから継承されていないため、遵守する契約はありません。

extendingあなたのテンプレートは、基本クラスが探しているビルディングブロックで構成されることになります。

+0

最初にすべてをインポートしてから、結果のテンプレートを解析するのは面白いことです。私はJinja2がこれをサポートしていることに気付きました。 –

+0

@DanielvanFlymen - 私はJinja2を使用していないので、私はそれが私が恐れている仕組みについてコメントできません。 – Sayse

1

このように考えてください。 "インクルード"を使用しているときは、実行された出力が得られます。プレースホルダ/変数はありません。

コンテンツテンプレートにのみ影響するようにcontent_base.htmlを作成することはできましたが、Djangoテンプレートで不要なブロック継承にあまりにも多くのパフォーマンスが低下していると誤解しています。また、{%block%}は{%include%}を使用するよりも高速です。

関連する問題