twig 模板系统重复内容的标记 'use'
Tag 'use' of twig templating system duplicate content
使用 sf2.6.4 和 Twig 模板系统,我对标签 'use'.
有一个奇怪的行为
使用定义默认导航栏和 header 内容的简单基本模板:
{# base.html.twig #}
<html lang="fr">
<head></head>
<body>
{% block navbar %}<hr> nav bar foo bar<hr>{% endblock %}
<!-- a default header -->
{% block header %}
{% include 'AppBundle:TestingTwigUse:header.html.twig' %}
{% endblock %}
</body>
使用给定的默认 header.html.twig 模板:
{# header.html.twig #}
{% block header_container %}
{% block header_title %}<h1>Default title</h1>{% endblock %}
{% block header_content %}
<div>
This default text header, blablabla...
</div>
{% endblock %}
{% endblock %}
当我尝试构建索引模板时,继承基础模板并使用 'use' 标记覆盖 header 内容,如下所示:
{# index.html.twig #}
{% extends "AppBundle:TestingTwigUse:base.html.twig" %}
{% block header %}
{% use 'AppBundle:TestingTwigUse:header.html.twig' %}
{% block header_container %}
{{ parent() }}
{% block header_content %}
***** child template specific content ****
{% endblock %}
{% endblock %}
{% endblock %}
我用 header_content 块两次得到以下奇怪的结果:
***** child template specific content **** ***** child template specific content ****
有什么想法吗?
我认为问题是您有两个 header_content
块 - 一个在 index.twig.html
中,第二个在 parent()
调用中。第二个定义覆盖第一个导致编译后重复。
如果您想覆盖默认文本 - 您应该删除 parent()
调用。如果你想更新(附加)默认文本 - 你应该重构你的块结构以避免相同的名称。
UPD 试试下面的索引
{# index.html.twig #}
{% extends "AppBundle:TestingTwigUse:base.html.twig" %}
{% block header_content %}
***** child template specific content ****
{% endblock %}
更新 2 检查这个 solution
I found a solution. Use the block() function to get the child's block
content and pass it to header.html.twig as a variable in the include
statement
最后两个解决方案:
有了'use',我们可以得到我们想要保留但失去继承的部分:
{% block header %}
{% use 'AppBundle:TestingTwigUse:header.html.twig' with header_title as parent_header_title %}
{% block header_title %}
{{ block('parent_header_title') }}
{% endblock %}
***** child template specific content ****
{% endblock %}
一个是 'embeb',它结合了包含和扩展行为:
{% block header %}
{% embed 'AppBundle:TestingTwigUse:header.html.twig' %}
{% block header_content %}
***** child template specific content ****
{% endblock %}
{% endembed %}
{% endblock %}
使用 sf2.6.4 和 Twig 模板系统,我对标签 'use'.
有一个奇怪的行为使用定义默认导航栏和 header 内容的简单基本模板:
{# base.html.twig #}
<html lang="fr">
<head></head>
<body>
{% block navbar %}<hr> nav bar foo bar<hr>{% endblock %}
<!-- a default header -->
{% block header %}
{% include 'AppBundle:TestingTwigUse:header.html.twig' %}
{% endblock %}
</body>
使用给定的默认 header.html.twig 模板:
{# header.html.twig #}
{% block header_container %}
{% block header_title %}<h1>Default title</h1>{% endblock %}
{% block header_content %}
<div>
This default text header, blablabla...
</div>
{% endblock %}
{% endblock %}
当我尝试构建索引模板时,继承基础模板并使用 'use' 标记覆盖 header 内容,如下所示:
{# index.html.twig #}
{% extends "AppBundle:TestingTwigUse:base.html.twig" %}
{% block header %}
{% use 'AppBundle:TestingTwigUse:header.html.twig' %}
{% block header_container %}
{{ parent() }}
{% block header_content %}
***** child template specific content ****
{% endblock %}
{% endblock %}
{% endblock %}
我用 header_content 块两次得到以下奇怪的结果:
***** child template specific content **** ***** child template specific content ****
有什么想法吗?
我认为问题是您有两个 header_content
块 - 一个在 index.twig.html
中,第二个在 parent()
调用中。第二个定义覆盖第一个导致编译后重复。
如果您想覆盖默认文本 - 您应该删除 parent()
调用。如果你想更新(附加)默认文本 - 你应该重构你的块结构以避免相同的名称。
UPD 试试下面的索引
{# index.html.twig #}
{% extends "AppBundle:TestingTwigUse:base.html.twig" %}
{% block header_content %}
***** child template specific content ****
{% endblock %}
更新 2 检查这个 solution
I found a solution. Use the block() function to get the child's block content and pass it to header.html.twig as a variable in the include statement
最后两个解决方案:
有了'use',我们可以得到我们想要保留但失去继承的部分:
{% block header %}
{% use 'AppBundle:TestingTwigUse:header.html.twig' with header_title as parent_header_title %}
{% block header_title %}
{{ block('parent_header_title') }}
{% endblock %}
***** child template specific content ****
{% endblock %}
一个是 'embeb',它结合了包含和扩展行为:
{% block header %}
{% embed 'AppBundle:TestingTwigUse:header.html.twig' %}
{% block header_content %}
***** child template specific content ****
{% endblock %}
{% endembed %}
{% endblock %}