Jinja2变量包含在模板中

时间:2014-11-02 00:29:22

标签: python 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 个答案:

答案 0 :(得分: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 -%}

如果你需要在块之外设置相同的变量,我只需将相同的行放两次,一次在块外,一次在内部。这对我来说似乎并不完美,但我不知道另一种方式。