我不理解Jinja2的调用块。

14

我理解这个概念,但我不理解语法。

我将使用他们网站上使用的示例

{% macro render_dialog(title, class='dialog') -%}
<div class="{{ class }}">
    <h2>{{ title }}</h2>
    <div class="contents">
        {{ caller() }}
    </div>
</div>
{%- endmacro %}

{% call render_dialog('Hello World') %}
   This is a simple dialog rendered by using a macro and
    a call block.
{% endcall %}

输出结果将会是什么?

子问题(因为我对这个如何工作感到非常困惑):您是否允许每个宏只有一个调用者?

1个回答

14

这是输出结果:

<div class="dialog">
    <h2>Hello World</h2>
    <div class="contents">

   This is a simple dialog rendered by using a macro and
    a call block.

    </div>
</div>

当我们调用render_dialog时,将'Hello World'作为标题传递,当它到达caller()时,它会将call块的内容传递。


很好。那么这与在另一个宏中调用宏有什么不同呢? - Tri Noensie
你可以将宏想象成传统语言中的函数。调用块只是对该函数的调用。 - Mariy
5
我发现在一个嵌套的宏中,运行caller()会引发错误,因为没有传递调用者数据。实际上我想要的是传递给父级宏的数据。我通过在外部宏中使用{% set content = caller() %},然后在内部宏中使用{{ content }}来获取这个数据。 - tremby

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接