use
¶
注解
水平重用是一种高级的Twig特性,在常规模板中几乎不需要。它主要用于那些需要在不使用继承的情况下使模板块可重用的项目。
模板继承是Twig最强大的特性之一,但它仅限于单个继承;一个模板只能扩展另一个模板。此限制使模板继承易于理解和调试:
1 2 3 4 | {% extends "base.html" %}
{% block title %}{% endblock %}
{% block content %}{% endblock %}
|
水平重用是实现与多重继承相同目标的一种方法,但没有相关的复杂性:
1 2 3 4 5 6 | {% extends "base.html" %}
{% use "blocks.html" %}
{% block title %}{% endblock %}
{% block content %}{% endblock %}
|
这个 use
语句告诉Twig导入中定义的块 blocks.html
到当前模板中(类似于宏,但对于块):
1 2 3 | {# blocks.html #}
{% block sidebar %}{% endblock %}
|
在这个例子中, use
语句导入 sidebar
块到主模板中。代码主要相当于以下代码(导入的块不会自动输出):
1 2 3 4 5 | {% extends "base.html" %}
{% block sidebar %}{% endblock %}
{% block title %}{% endblock %}
{% block content %}{% endblock %}
|
注解
这个 use
标记只在不扩展其他模板、不定义宏以及正文为空时导入模板。但它可以 use 其他模板。
注解
因为 use
语句的解析独立于传递给模板的上下文,模板引用不能是表达式。
导入的块也可以覆盖任何主模板。如果模板已经定义 sidebar
块,然后是中定义的 blocks.html
被忽略。为了避免名称冲突,可以重命名导入的块:
1 2 3 4 5 6 7 | {% extends "base.html" %}
{% use "blocks.html" with sidebar as base_sidebar, title as base_title %}
{% block sidebar %}{% endblock %}
{% block title %}{% endblock %}
{% block content %}{% endblock %}
|
这个 parent()
函数自动确定正确的继承树,因此可以在重写导入模板中定义的块时使用:
1 2 3 4 5 6 7 8 9 10 | {% extends "base.html" %}
{% use "blocks.html" %}
{% block sidebar %}
{{ parent() }}
{% endblock %}
{% block title %}{% endblock %}
{% block content %}{% endblock %}
|
在这个例子中, parent()
将正确调用 sidebar
阻止 blocks.html
模板。
小技巧
重命名允许您通过调用“parent”块来模拟继承:
1 2 3 4 5 6 7 | {% extends "base.html" %}
{% use "blocks.html" with sidebar as parent_sidebar %}
{% block sidebar %}
{{ block('parent_sidebar') }}
{% endblock %}
|
注解
你可以用很多 use
任何给定模板中的语句。如果两个导入的模板定义了同一个块,则最新的一个将获胜。