Twig - 使用父模板中的宏

时间:2013-12-23 09:07:27

标签: macros import twig

假设我在macro.html.twig中有一个简单的宏:

{% macro simple_macro() %}
    <h1>Simple macro</h1>
{% endmacro %}

Heres template layout.html.twig:

{% block body %}{% endblock %}

主文件content.html.twig

{% extends 'layout' %}

{% from 'simple_macro' import simple_macro %}

{% block body %}
    {{ simple_macro() }}
{% endblock %}

以下代码有效,但我有许多文件,例如content.html.twig,我不想在每个文件中复制/粘贴{% from 'simple_macro' import simple_macro %}。所以我把这一行移到layout.html.twig

{% from 'simple_macro' import simple_macro %}

{% block body %}{% endblock %}

但它会引发错误:

The function "simple_macro" does not exist in "content".

这是我的问题: 是否可以在父模板中导入宏并在子模板中使用它们?

感谢您的时间。

2 个答案:

答案 0 :(得分:9)

不,这是不可能的。宏必须在您使用它们的特定文件中导入,并且这种行为是设计用于增加代码的详细程度和可读性 - 如果您可以在模板中使用大量随机标记而不清楚,则生活将不会更加清晰他们被定义的地方的线索。

答案 1 :(得分:-1)

确实可以使用import

{% extends 'foo.html.twig' %}

{% import 'foo.html.twig' as foo %}

{% block content %}
    <div{{ foo.attributes(listAttributes) }}>
        {{ block('children') }}
    </div>
{% endblock %}