如何有条件地覆盖 TWIG 布局块?

2022-08-30 16:17:48

首先,让我从我尝试使用的代码开始:

{% if modal == true %}
    {% block header %}{% endblock %}
    {% block footer %}{% endblock %}
{% endif %}

我试图实现的是,仅当称为模态的变量为真时才不显示我的页眉和页脚块。我在if语句下面也有这个:

{% block content %}
    {{ dump(modal) }}
{% endblock %}

这里发生的事情是,我用于清空页眉和页脚块的覆盖始终运行,无论模式的值是否为真。因此,我使用作为 false 传入的模态来运行此内容,结果是页眉和页脚仍然没有显示。dump 命令的输出准确地显示 true 或 false,但条件在 if 语句中似乎始终计算为 true。

块不能包装在条件语句中吗,或者我需要做一些额外的事情来使这项工作?

感谢您提供的任何帮助。


答案 1

定义

{% block footer %}Some standard content{% endblock %}

在父枝模板中。然后在模板中,您要确定是否显示页脚的内容,您可以执行以下操作:

{% block footer %}
  {% if not modal == true %}
    {{ parent() }}
  {% endif %}
{% endblock %}

如果模式为真 - 页脚将为空,如果不是 - 在页脚中将打印“一些标准内容”


答案 2

块不关心它周围的任何逻辑,如文档中所述:

块提供了一种更改模板特定部分的呈现方式的方法,但它不会以任何方式干扰其周围的逻辑。

您应该将该逻辑放在块内部,而不是放在外部,正如您在该文章的最后一个示例中看到的那样。


推荐