2012-02-12 6 views
18

Jinja2を使用してインクルードされたテンプレートからブロックを修正する方法がわかりません。ここでは、3つのファイルを使用する例を示します。Jinja2ブロックとインクルードを使用した継承

base.html:

<html>{% include "content.html" %}</html> 

content.html:story.htmlをレンダリングする場合

<h1>{% block title %}Title{% endblock title%}</h1> 
<div>{% block content_body %}Content Body{% endblock content_body%}</div> 

story.html

{% extends "base.html" %} 
{% block title %}story.title{% endblock title %} 
{% block content_body %}story.description{% endblock content_body %} 

、私が買ってあげる:

<html> 
<h1>Title</h1> 
<div>Content Body</div> 
</html> 

期待値でどのようにレンダリングしますか?

+2

@ArminRonacherはあなたが必要なときにどこにありますか?これは、 'story 'が' base'をオーバーライドしているにもかかわらず、 'include" content.html "' 'story 'の中の同じ名前のブロックの内容をオーバーライドする' - しかし、私はこれが期待されることを示すために文書に何も表示されません。 –

答えて

5

Jinja2のマクロを見てください。私はこのSO questionがあなたの質問に関連していると思います。

12

base.htmlは、どのテンプレートでも呼び出されていないためレンダリングされません。

base.html:

<html>{% block html %}{% endblock %}</html> 

content.html:

{% extends "base.html" %} 
{% block html %} 
<h1>{% block title %}Title{% endblock title%}</h1> 
<div>{% block content_body %}Content Body{% endblock content_body%}</div> 
{% endblock %} 

それでも、それはおそらく過剰です、あなたは可能性がありますあなたは行うことができは延長の第二のレベルであります単一の基本テンプレートで十分である(つまり、base.htmlcontent.htmlを1つのテンプレートに結合する)。

+0

これは、テンプレートのチェックのための適切な解決策です。彼らは概念を理解するのに似たようなことを行います。 – Bedros

関連する問題