【发布时间】:2013-01-17 15:09:06
【问题描述】:
所以我有一个工作布局 _layout.html(使用 Jinja2 v2.6 和 Flask),其中包括带有 {% include 'header.html' %} 的标题和带有 {% block content %}{% endblock %} 的正文内容(按此顺序)。
header.html
<ul>
<li><a href="/about" {% if active_page == 'about' %} class="selected" {% endif %}>ABOUT</a></li>
</ul>
关于.html
{% extends "_layout.html" %}
{% set active_page = 'about' %}
{% block content %}
...
{% endblock %}
问题在于,由于子模板是全局的,并且在评估布局模板之前执行,因此 class="selected" 没有被添加,因为 header.html 模板在其上下文中没有 active_page。
如果我将 header.html 内容放在主布局中一切正常,我如何使用我拥有的包含和结构使其工作?
编辑:
我也试过{% include 'header.html' with context %} 和{% from 'header.html' import input with context %} 都不起作用。
【问题讨论】:
-
你可以把header是一个block,或者看看super。
-
我不确定这是不是答案,因为我真的需要这是一种包含,这样我就可以在站点周围使用 header.html,同时保持我拥有的结构。我认为它可以创建自定义块?
-
看看这个答案:stackoverflow.com/questions/13137628/…。并在需要时使用它来覆盖您孩子中的基本标头。
-
正如documentation 所说:
Starting with Jinja 2.2 you can explicitly specify that variables are available in a block by setting the block to “scoped” by adding the scoped modifier to a block declaration
标签: python templates flask jinja2