macros - Twig - 使用来自父模板的宏

标签 macros import twig

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

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

继承人模板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 %}

但它抛出错误:

“content”中不存在函数“simple_macro”。

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

感谢您的宝贵时间。

最佳答案

不,这是不可能的。宏必须导入到您使用它们的特定文件中,这种行为是设计来增加代码的冗长性和可读性的——如果您可以在模板中使用大量随机标签而没有明确的代码,生活就不会变得更加清晰它们在哪里被定义的线索。

关于macros - Twig - 使用来自父模板的宏,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20740230/

相关文章:

vim - 在 Vim 中复制行并附加几个字母

javascript - Typescript:如何在全局范围内进行一些导入?

mysql - 导入MySQL5.5数据库

Symfony2 - 渲染 Controller 显示空白页

php - 如何将所有请求查询参数传递给 Twig symfony 2 中的嵌入式 Controller ?

javascript - 表单嵌入 Symfony2 数据原型(prototype)为 Null

c - 是否有可能将类似 Lisp 的宏构建成命令式语言?

macros - LISP 表达式列表

haskell - monad 和宏有什么区别?

javascript - 代码未在 Javascript 模块类型脚本源内执行 [ES6]