如何避免在基本模板中呈现块 - 或者:如何定义多行块状变量?

How to avoid rendering a block in a base template - or: how to define a multiline block-like variable?

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

我在名为 lib.jinja 的文件中有一个 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>

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

我似乎可以 "work around" 通过将 content.htm 转换为空基本模板的子模板(通过在其顶部添加 extends 标记)。

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

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

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

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

setendset 标签解决了我的问题。