代码之家  ›  专栏  ›  技术社区  ›  s-m-e

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

  •  0
  • s-m-e  · 技术社区  · 8 年前

    我对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>
    

    注意,该内容出现两次,一次通过宏呈现,另一次直接呈现在上面,就像在内容块中定义的一样。 HTM . 我很想避免这个块被渲染两次——它应该被输入到宏中并且只通过宏渲染。

    我似乎可以通过转动来“绕过”它 HTM 添加到子模板中(通过添加 extends 标记在其顶部)的空基模板。

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

    如何以一种明智的方式解决这个问题,即如何通过扩展空的基础模板来处理这个问题?是否有其他类型的块或变量可以满足我的需要?

    1 回复  |  直到 8 年前
        1
  •  0
  •   s-m-e    8 年前

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

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

    这个 set endset 标签解决了我的问题。

    推荐文章