2014-09-22 2 views
1

У меня есть два шаблона jinja2, где вторая распространяется первая:упаковка блоков в Jinja2

<h1>Some title</h1> 
{% block content %} 
{% endblock %} 

и

{% block content %} 
    content 
{% endblock %} 

Теперь я хочу, чтобы иметь возможность вставить переменное число «оберток» между этими двумя шаблонами, где вторая расширяет оболочку (которая расширяет следующую оболочку) *, которая расширяет первый шаблон. Оболочка может выглядеть следующим образом:

{% block content %} 
    <div class="wrapper"> 
    {% block content %} 
    {% endblock %} 
    </div> 
{% endblock %} 

Я бы ожидать, что это приведет к следующему оказанной HTML:

<h1>Some title</h1> 
<div class="wrapper"> 
    content 
</div> 

К сожалению шаблон обертка сверху не действует в Jinja2, потому что блоки просто не работайте так. Итак, есть ли способ сделать то, что я хочу сделать в jinja2? Если нет: существуют ли какие-либо другие механизмы шаблонов, которые способны на это?

(Обратите внимание, что переименование внутреннего блока не будет делать, потому что мне нужно, чтобы иметь возможность добавить переменной количества оберток.) ​​

+0

Вам нужно указать свои уникальные имена. – dirn

+0

Я знаю это. Мой вопрос не * почему * это не работает, но * как * я мог бы заставить его работать. И уникальные имена не являются решением, как уже объяснялось в вопросе. – tobib

+0

Как вы управляете переменным числом оберток? – dirn

ответ

0
{% block content %} 
    <div class="wrapper"> 
    {{ super() }} 
    </div> 
{% endblock %} 

От Jinja2 docs:

Можно визуализировать содержимое родительского блока путем вызова супер. Это возвращает результаты родительского блока:

+0

Это действительно работает. Но расширение находится в противоположном направлении от того, что я ожидал: обертка находится на самом верху. – tobib

0

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

Смежные вопросы