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>
更新:经过小范围的研究,我发现问题和 {% block %}
部分有关——如果 include
标签在 block
之外,它就能获取到文档的上下文。但出于某些原因,我想把它放在 block
里面。
1 个回答
2
根据我的经验,可以通过把你的 {% 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 -%}
如果你需要在块外也设置相同的变量,我建议你把同样的代码写两遍,一次放在块外,一次放在块内。虽然这样做看起来不太完美,但我不知道还有其他更好的方法。