flask - jinja 是否支持宏中的多个 block ?

标签 flask jinja2

我正在使用带有 jinja 的 flask 。

我知道您可以定义具有多个占位符 block 的基本页面模板:

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

而且我知道您可以使用单个占位符定义宏:
{% 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 %}

但是是否可以定义具有多个占位符 block 的宏?

最佳答案

不,你不能。虽然您可以将多个参数传递给宏,但只有一个 caller可以存在。尽管如此,您仍可以将参数从宏传递回调用上下文并模拟您想要的行为,如下所示:

{% 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 %}

关于flask - jinja 是否支持宏中的多个 block ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23964579/

相关文章:

python - Flask 框架中的数据库连接问题

python - Flask 中的静态文件 - robots.txt、sitemap.xml (mod_wsgi)

python - 创建类似于 loop.cycle() 的 Jinja 变量/过滤器

python - Jinja2/Python - 字符串到整数的比较

python - ansible过滤器映射数组并放入json模板

javascript - JQuery重新加载DIV? ( flask /Jinja2)

python - 使用带前导斜杠的路径的 Flask 路由

python - 在 Python Flask 应用程序中发送对 OPTIONS 的响应

python - Flask 运行时出现问题

python - Jinja 2 从列表中选择项目[n]