2014-11-02 149 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

根據我的經驗,可以通過在{% block %}聲明中包含{% set %}聲明來解決此問題。在您的例子:

<!-- 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

嗯,很好的解決方案!我現在無法檢查,但可能對未來的使用有所幫助。 – 2015-08-18 07:56:20

相關問題