0

我对神社很陌生,所以请原谅这个可能很愚蠢的问题......

我有一个 jinja 宏位于一个名为的文件lib.jinja中,如下所示

{% macro some_macro(some_content) %}
    <div class="some_class">{{ some_content }}</div>
{%- endmacro %}

我从另一个名为 的文件中导入它,该文件content.htm大致如下所示:

{% from "lib.jinja" import some_macro %}
{% block content %}
    Some content
{% endblock %}
{{ some_macro(self.some_macro(self.content())) }}

渲染的输出如下所示:

Some content
<div class="some_class">Some content</div>

请注意,内容出现了两次,一次通过/由宏呈现,另一次 - 直接在上面 - 呈现,就像它在名为 content 的块中定义的一样content.htm。我很想避免该块被渲染两次 - 它应该被输入宏并仅通过它渲染。

我似乎可以通过变成空基本模板content.htm的子模板(通过在其顶部添加标签)来“解决”它。extends

也许我对这里的概念缺乏理解:块不是变量 - 我明白了。如果没有extends标签,我假设模板被视为基本模板。如果没有子模板或其他指令,我猜该块只是按原样呈现,然后可以说第二次被宏拾取 - 对吗?

我怎样才能以理智的方式解决这个问题,即除了扩展一个空的基本模板之外,我怎么能处理这个问题?是否有另一种类型的块或变量可以满足我的需要?

4

1 回答 1

0

就在我提交了这个问题之后,我终于在手册中找到了我要找的东西:块分配

{% from "lib.jinja" import some_macro %}
{% set content %}
    Some content
{% endset %}
{{ some_macro(self.some_macro(content)) }}

setendset标签解决了我的问题。

于 2018-06-11T10:21:58.550 回答