我正在尝试在子模板中指定一个变量,并从另一个包含在父模板中的模板中访问它。
这是我正在尝试做的事情(代码修剪到最低限度):
child.html
{% set var = 'foo' %}
{% extends 'base.html' %}
base.html文件
{% include 'bar.html' %}
一个bar.html
{{ var }}
此时,我渲染child.html
文件,没有输出任何内容。
如果我在base.html
文件而不是child.html
文件中指定变量,则可以正常工作。
如果我在渲染调用中传递变量,它会起作用。 template.render(var = 'foo')
将base.html文件归为{% include 'bar.html' with context %}
并不能解决问题。
我能够很好地访问base.html文件中的变量,事实上,我已经设法通过将{% set foo = var %}
添加到我的base.html并将bar.html更改为{{ foo }}
如此简洁地说,我的问题是:是否有一种方法可以让父模板中包含的模板访问子模板中的变量集? (无需像我的解决方法那样在父文件中定义新变量)
答案 0 :(得分:0)
我能够通过在父模板上传递子块中的变量来获得此功能。
实施例。我在我的子模板active_page
上声明了pricing.html
。
首先,我无法访问我所包含的文件active_page
中的navbar-alt.html
,但是当我在导航栏内部设置变量时,它可以正常工作。
{% block wrapper %}
<div id="wrapper">
{% block navbar %}
{% set navigation_bar = [
('/what-we-do', 'what-we-do', 'what we do'),
('/pricing', 'pricing', 'pricing'),
('/demo', 'demo', 'demo'),
('http://indico.readme.io/v1.0/docs', 'docs', 'docs')
] -%}
{% set active_page = active_page|default('index') -%}
{% if "dashboard" not in request.path %}
{% include 'includes/navbar-alt.html' %}
{% else %}
{% include 'includes/navbar.html' %}
{% endif %}
{% endblock navbar %}
{% if "dashboard" in request.path %}
{% block sidebar %}
{% include 'includes/sidebar.html' %}
{% endblock sidebar %}
{% endif %}
{% block content_wrapper %}
<div id="content">
{% block content %}{% endblock content %}
</div>
{% endblock content_wrapper %}
{% include 'includes/flashes.html' %}
</div>
{% endblock wrapper %}
原创灵感: Jinja Tricks