如何在Twig 2.x的嵌套模板中覆写block?
Twig嵌套模板覆写嵌套Block的解决方案
问题核心:你无法覆写nestedblock,是因为它是myblock的嵌套子Block,Twig中嵌套Block的覆写需要保持层级结构,直接在子模板顶层定义nestedblock不会生效。
正确写法示例
假设你的父模板(base.twig)结构如下:
Hi {% block myblock %} myblock {% block nestedblock %} nestedblock {% endblock %} {% endblock %}
子模板需要在覆写myblock的同时,在其内部重新定义nestedblock,写法如下:
{% extends 'base.twig' %} {% block myblock %} custom myblock {% block nestedblock %} custom nestedblock {% endblock %} {% endblock %}
原理说明
Twig的Block是层级作用域的,nestedblock属于myblock的内部Block,只有在myblock的覆写块内重新定义它,才能替换父模板中对应位置的内容。如果直接在子模板顶层写{% block nestedblock %},它的作用域和父模板里的嵌套nestedblock不匹配,因此无法覆盖。
效果验证
修改后输出将符合预期:
Hi
custom myblock custom nestedblock
内容的提问来源于stack exchange,提问作者greew
相关产品推荐
相关产品推荐

