2

次のようなテンプレートがあります。

{% include "base/top.html" with context %}
{% include "base/nav.html" with context %}
<div id="content">
    Stuff
    {% block content %}{% endblock %}
</div>
{% include "base/bottom.html" with context %}

base/nav.htmlbase/bottom.html静的コンテンツがbase/top.html含まれていますが、{% block title %}. したがって、次のように最初のファイルから継承しようとする 2 番目のテンプレートがある場合:

{% extends firstfile.html %}
{% block title %}Imarealpage!{% endblock %}
{% block content %}Lorem ipsum dorem smitshm{% endblock %}

{% block title %}セクションはレンダリングされません。それと、含まれているファイル内の他のブロックや拡張テンプレートで定義されているブロックが、本来あるべき姿でレンダリングされるようにするにはどうすればよいですか?

4

1 に答える 1

2

あなたは仕組みを誤解して{% include %}います。{% include %}タグはプリプロセッサではありません。レンダリングする前に、インクルードされたテンプレートのコードをインクルード テンプレートに直接挿入しません。代わりに{% include %}、インクルードされたテンプレートの新しい独立したテンプレート レンダーを起動し (インクルードされたテンプレートを独自のコードから直接レンダリングしたかのように)、レンダリングされた結果をインクルードされたテンプレートのレンダリングに含めます。

これは、インクルードされたテンプレートが、インクルードされたテンプレートとは完全に別の継承階層を持つことを意味します。たとえば、いくつかのブロックを含む基本component.htmlテンプレートを作成してから、foo-component.htmlで始まり、{% extends "component.html" %}からいくつかのブロックを埋めるeg を作成できますcomponent.html。そして、をレンダリングし、 の継承を完了させlayout.html、結果を のその場所に配置することができます。しかし、ブロック内のブロックとブロック内のブロックの間にはまったく関係がありません。それらは、個別のブロック構造と継承階層を持つ個別のレンダーです。{% include "foo-component.html" %}foo-component.htmlcomponent.htmllayout.htmllayout.htmlcomponent.html

于 2016-02-19T18:38:24.007 に答える