2012-03-08 12 views
7

私がしたいことが可能かどうかは分かりません:親テンプレートのブロックを子テンプレートに含まれるファイルで埋めようとしています親のjinja2で親のためにインクルードされたファイルのブロックを使用する

ファイルt1.djhtml

<root> 
    <block t3_container> 
     {% block t3 %}This should be 'CONTENT'{% endblock %} 
    </block t3_container> 

    <block t2_container> 
    {% block t2 %}{% endblock %} 
    </block t2_container> 
</root> 

ファイルt2.djhtml

{% extends 't1.djhtml' %} 

{% block t2 %} 
     <block t2> 
      {%- include 't3.djhtml' with context %} 
     </block t2> 
{% endblock %} 

ファイルT3

これを説明する最良の方法は、テストケースであります.djhtml

{% block t3 %} 
     <block t3> 
      CONTENT 
     </block t3> 
{% endblock %} 

ファイルtest.py

from jinja2 import Environment, FileSystemLoader 
env = Environment(loader=FileSystemLoader('')) 
t=env.get_template('t2.djhtml') 
print t.render() 

出力は次のようになります。

<root> 
    <block t3_container> 
     This should be 'CONTENT' 
    </block t3_container> 

    <block t2_container> 

     <block t2> 
     <block t3> 
      CONTENT 
     </block t3> 

     </block t2> 

    </block t2_container> 
</root> 

t2ブロックが空であるべきであり、t3_containerは内部ブロックt3のコンテンツを持っている必要があります。これをどのように達成するのですか?

答えて

4

私自身の質問に答えるには、インクルードファイルでマクロを使用できますが、インクルードする代わりにコンテキストでマクロをインポートします。

//File T1 
<root> 
    <block t3_container> 
    {% block t3 %}{% endblock %} 
    </block t3_container> 

    <block t2_container> 
    {% block t2 %}{% endblock %} 
    </block t2_container> 
</root> 

// File T2 
{% extends 't1.djhtml' %} 
{%- from 't3.djhtml' import inner, inner2 with context %} 

{% block t3 %} 
    {{inner2()}} 
{% endblock %} 

{% block t2 %} 
    <block t2> 
     {{ inner() }} 
    </block t2> 
{% endblock %} 

// File T3 
{% macro inner2() %} 
    <block t3> 
     CONTENT '{{foo+1}}' 
    </block t3> 
{% endmacro %} 

{% macro inner() %} 
    hello 
{% endmacro %} 

// test.py 
from jinja2 import Environment, FileSystemLoader 
env = Environment(loader=FileSystemLoader('')) 
t=env.get_template('t2.djhtml') 
print t.render({ 'foo' : 122 }) 
+0

戻ってあなたのソリューション@リチャードを追加していただきありがとうございます!このソリューションは素晴らしく、私の夜を救った – gtalarico

関連する問題