【问题标题】:Twig template parent() caused double parent blockTwig 模板 parent() 导致双父块
【发布时间】:2016-02-08 16:33:42
【问题描述】:

我有一个 base.html.twig template.html.twigdashboard.html.twig。 仪表板扩展了扩展基础的模板。

基地:

{% block javascripts %} 
    <script src="1.js"></script> 
{% endblock %}

模板:

{% block javascripts %} 
    {{ parent() }}
    <script src="2.js"></script>
{% endblock %}

仪表板:

{% block javascripts %}
    {{ parent() }}
    <script src="3.js"></script>
{% endblock %}

这种模板设置导致了多余的脚本标签,其中所有内容都像这样加倍

<script src="1.js"></script>
<script src="2.js"></script>
<script src="3.js"></script>
<script src="1.js"></script>
<script src="2.js"></script>
<script src="3.js"></script>

我错过了什么吗?为什么会这样?

编辑1:

base.html.twig:

extends nothing

template.html.twig:

{% extends 'base.html.twig' %}

默认/dashboard.html.twig:

{% extends '::template.html.twig' %}

【问题讨论】:

  • 你能生成一个最小可行的可重现测试用例吗?您的示例中没有足够的上下文来查看到底出了什么问题。
  • @jbafford 我通过从 template.twig.html 中删除 parent() 函数调用并将脚本添加到基础中解决了这个问题。这仍然不是解决方案。
  • 鉴于您发布的示例,您所描述的不应该发生。会不会有其他干扰?
  • @Yoshi 环境设置不好?我正在使用远程服务器,并且为 app/cache app/logs 和 app/config/parameters.yml 设置了所有权、组和权限

标签: symfony templates twig


【解决方案1】:

在我看来,您的{% extends "file" %} 很糟糕。

修复:

模板:

{% extends "base_path" %}
{% block javascripts %} 
    {{ parent() }}
    <script src="2.js"></script>
{% endblock %}

仪表板:

{% extends "template_path" %}
{% block javascripts %}
    {{ parent() }}
    <script src="3.js"></script>
{% endblock %}

【讨论】:

  • 我将 Edit1 添加到我的原始帖子中。看起来不对吗?
  • 你的代码很好。也许验证您没有在页眉和页脚中添加 js。
  • 不,我没有在任何地方添加块,但在正文的末尾。
【解决方案2】:

有点晚了,但由于还没有公认的答案,我会试一试。

我遇到了同样的情况,这为我解决了这个问题,在我的情况下,它与基本模板的结构和您尝试扩展基本文件的当前模板有关,在我的情况下,它从你的代码中我可以看出,情况与你类似。

这个例子中的结构基本上是错误的:

基地:

{% block notAddedInTemplate %}
    {% block javascripts %} 
        <script src="1.js"></script> 
    {% endblock javascripts%}
{% endblock notAddedInTemplate %}

模板:

{% extends 'base.html.twig' %}
{% block javascripts %} 
    {{ parent() }}
    <script src="2.js"></script>
{% endblock javascripts%}

应该是:

基地:

{% block notAddedInTemplate %}
    {% block javascripts %} 
        <script src="1.js"></script> 
    {% endblock javascripts%}
{% endblock notAddedInTemplate %}

模板:

{% extends 'base.html.twig' %}
    {% block notAddedInTemplate %}
        {% block javascripts %} 
        {{ parent() }}
        <script src="2.js"></script>
    {% endblock notAddedInTemplate %}

希望这能帮助您解决问题。

【讨论】:

    猜你喜欢
    • 2012-07-10
    • 2012-12-16
    • 1970-01-01
    • 2016-11-16
    • 1970-01-01
    • 2017-08-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多