只替换树枝中的一个嵌套块

我有以下树枝结构:


基地.twig


<html>

  <head>

  </head>


  <body class="fade-in {{body_class}}">

    <main>

      {% block menu %}

          {% include 'menu.twig' %}

      {% endblock %}

    </main>

  </body>

</html>

菜单.twig


<header>

  <div>

    {% block menu_main %}

       {% include 'menu-main.twig' %}

    {% endblock %}


    {% block menu_country %}

        {% include 'menu-country.twig' with { menu_country: dropdownland } %}

    {% endblock %}

  </div>

</header>

孩子.twig


{% extends "base.twig" %}


{% block menu %}

  {% block menu_country %}

    {% include 'menu-country.twig' with { menu_country: menu_ap_countries } %}

  {% endblock %}

{% endblock %}

我想要实现的是,只需替换 child.twig 中的块menu_country。如果我使用上面的方法,整个块菜单将被替换为只有menu_country,这意味着块menu_main丢失。


我也试过


{% extends "base.twig" %}


{% block menu %}

  {{ parent() }}

  {% block menu_country %}

    {% include 'menu-country.twig' with { menu_country: menu_ap_countries } %}

  {% endblock %}

{% endblock %}

但这会渲染块menu_country两次。有什么办法可以做到这一点?


Helenr
浏览 79回答 2
2回答

Qyouu

由于@DarkBees 的回答进一步调查后,我遇到了嵌入功能,这正是我在这种情况下所需要的。所以扩展模板变成了这样:{% block menu %}&nbsp; {% embed 'menu.twig'%}&nbsp; &nbsp; {% block menu_country %}&nbsp; &nbsp; &nbsp; {% include 'menu-country.twig' with { menu_country: menu_ap_countries } %}&nbsp; &nbsp; {% endblock %}&nbsp; {% endembed %}{% endblock %}通过嵌入,我可以覆盖里面的块menu.twig

开心每一天1111

包括模板并不意味着您正在模板中导入所述块。这意味着只有块menu将存在于内部child.twig。在您的第一个示例中,您实际上只是覆盖该块menu并在其中创建一个新块menu_country。在您的第二个示例中,您twig要输出块的默认内容menu并向其附加一个新块menu_country。一个可能的解决方案是将设置更改为此,例如菜单.twig<header>&nbsp; <div>&nbsp; &nbsp; {% block menu_main %}&nbsp; &nbsp; &nbsp; &nbsp;{% include 'menu-main.twig' %}&nbsp; &nbsp; {% endblock %}&nbsp; &nbsp; {% block menu_country %}&nbsp; &nbsp; &nbsp; &nbsp; {% include 'menu-country.twig' %}&nbsp; &nbsp; {% endblock %}&nbsp; </div></header>菜单国家.twig<ul class="country">{% for country in menu_country|default(dropdownland) %}&nbsp; &nbsp; <li><a href="#">{{ country }}</a></li>{% endfor %}</ul>孩子.twig{% extends "base.twig" %}{% block menu %}&nbsp; &nbsp; {% include 'menu.twig' with { menu_country: menu_ap_countries, } %}{% endblock %}
打开App,查看更多内容
随时随地看视频慕课网APP