Используйте блоки из включенных файлов для родителя в jinja2

я не уверен, возможно ли то, что я хочу сделать:Я пытаюсь получить блок в родительском шаблоне, который будет заполнен файлом, включенным в дочерний шаблон родительского шаблона.

Лучший способ объяснить это - тестовый пример:

файлt1.djhtml:


    
        {% block t3 %}This should be 'CONTENT'{% endblock %}
    

    
    {% block t2 %}{% endblock %}
    

файлt2.djhtml:

{% extends 't1.djhtml' %}

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

файлt3.djhtml:

{% block t3 %}
        
            CONTENT
        
{% endblock %}

файлtest.py:

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

Выход:


    
        This should be 'CONTENT'
    

    

        
        
            CONTENT
        

        

    

t2 блок должен быть пустым, иt3_container должен иметь блокt3содержание внутри. Как мне это сделать?

Ответы на вопрос(1)

Решение Вопроса

вы можете использовать макросы во включенном файле, но вместо того, чтобы включать их, вы импортируете макросы с контекстом.

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

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

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

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

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

// File T3
{% macro inner2() %}
    <block t3="">
        CONTENT '{{foo+1}}'
    </block>
{% 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 })
 gtalarico03 авг. 2016 г., 08:16
Спасибо, что вернулись и добавили свое решение @Richard! Это решение работало отлично и просто спасло мне ночь

Ваш ответ на вопрос