Flask jinja是否支持宏中的多个块?

Flask jinja是否支持宏中的多个块?,flask,jinja2,Flask,Jinja2,我在用烧瓶和金贾 我知道您可以使用多个占位符块定义一个基本页面模板: <html> <head> [ standard meta tags, etc go here ] {% block css %}{% endblock %} </head> <body> [ standard page header goes here ] {% block content

我在用烧瓶和金贾

我知道您可以使用多个占位符块定义一个基本页面模板:

<html>
    <head>
        [ standard meta tags, etc go here ]
        {% block css %}{% endblock %}
    </head>
    <body>
        [ standard page header goes here ]
        {% block content %}{% endblock %}
        [ standard page footer goes here ]
        {% block javascript %}{% endblock %}
    </body>
</html>

[标准元标记等,请点击此处]
{%block css%}{%endblock%}
[此处为标准页眉]
{%block content%}{%endblock%}
[此处为标准页脚]
{%block javascript%}{%endblock%}
我知道您可以使用单个占位符定义宏:

{% macro dialog() %}
    <div class="dialog">
        [ standard dialog header ]
        {{ caller() }}
    </div>
{% endmacro %}

{% call dialog() %}
    <div class="log-in">
        Log in or sign up! (etc.)
    </div>
{% endcall %}
{%macro dialog()%}
[标准对话框标题]
{{caller()}}
{%endmacro%}
{%call dialog()%}
登录或注册!(等等)
{%endcall%}

但是可以定义一个包含多个占位符块的宏吗?

不可以。虽然可以向宏传递多个参数,但只能存在一个调用方。不过,您可以将参数从宏传递回调用上下文,并模拟所需的行为,如下所示:

{% macro twoblocks()%}
    <div class="content-a">
        {{ caller(True) }}
    </div>
    <div class="content-b">
        {{ caller(False) }}
    </div>
{% endmacro %}

{% call(isA) twoblocks() %}
    {% if isA %}
        A content
    {% else %}
        B content
    {% endif %}
{% endcall %}
{%macro-twoblocks()%}
{{caller(True)}}
{{调用方(错误)}
{%endmacro%}
{%call(isA)twoblocks()%}
{%if isA%}
内容
{%else%}
B含量
{%endif%}
{%endcall%}

谢谢@muffel!这正是我想要的。