2014-11-02 2 views
1

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

<!-- index.html --> 
{%- set title= ' :: '.join((caption, page_title or '')) -%} 
{%- set description= ' :: '.join((desc, meta_desc or '')) -%} 
{%- block page_header -%} 
    {% include 'parts/_header.html' %} 

    <!-- I also tried do it with context without luck --> 
    {% include 'parts/_header.html' %} 
{%- endblock page_header -%} 



<!-- parts/header.html --> 
<header class="header-wrapper"> 
    <div class="header"> 
    <div class="title"><h1 class="title">{{ title|safe }}</h1></div> 
    <div class="description">{{ description|safe }}</div> 
    </div> 
</header> 

UPD: После небольшого исследования я обнаружил, что вопрос, связанный с {% block %} секции - в include теге находится вне block, то она предоставляется с контекстом документа. Но по некоторым причинам я хотел бы сохранить его внутри block.

ответ

1

По моему опыту, это можно исправить, включив в свои объявления {% set %} объявления {% block %}. В вашем примере:

<!-- index.html --> 
{%- block page_header -%} 
    {%- set title= ' :: '.join((caption, page_title or '')) -%} 
    {%- set description= ' :: '.join((desc, meta_desc or '')) -%} 
    {% include 'parts/_header.html' %} 
{%- endblock page_header -%} 

Если вам необходимо установить те же переменные вне блока, я бы просто поставить ту же линию дважды, один раз вне блока и один раз внутри. Это кажется мне несовершенным, но я не знаю другого пути.

+0

Хм, хорошее решение! Я не могу проверить это прямо сейчас, но это может быть полезно для будущего использования. –

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