假设我在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".
这是我的问题: 是否可以在父模板中导入宏并在子模板中使用它们?
感谢您的时间。
答案 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 %}