在集合上下文中不可用的Twig变量

时间:2017-01-25 08:22:01

标签: inheritance twig

我有以下Twig模板:

test_base.html

{% if language == 'sv' %}
    {% set website = 'exempel.se' %}
{% else %}
    {% set website = 'example.com' %}
{% endif %}

{% block content %}{% endblock %}

test.html

{% extends "test_base.html" %}
{% set link %}http://{{ website }}{% block campaign_link %}/campaign/{% endblock %}{% endset %}

{% block content %}
<div>
    <a href="{{ link }}">Click here</a>
</div>
{% endblock content %}

test_sv.html

{% extends "test.html" %}
{% set language = 'sv' %}
{% block campaign_link %}/kampanj/{% endblock %}

渲染时,test.html变为:

<div>
    <a href="http:///campaign/">Click here</a>
</div>

test_sv.html变成了这个:

<div>
    <a href="http:///kampanj/">Click here</a>
</div>

因此{{ website }}变量在set上下文中不可用。

我做错了什么,这是期望的行为还是我遇到过错误?

1 个答案:

答案 0 :(得分:1)

您应该在块link内移动设置content块,如下所示:

的test.html

{% extends "test_base.html.twig" %}
  {% block content %}
    {% set link %}http://{{ website }}{% block campaign_link %}/campaign/{% endblock %}{% endset %}
       <div>
         <a href="{{ link }}">Click here</a>
      </div>
{% endblock content %}

因此test.html的输出将为:

<div>
    <a href="http://example.com/campaign/">Click here</a>
</div>

因此test_sv.html的输出将为:

<div>
    <a href="http://exempel.se/kampanj/">Click here</a>
</div>

一个工作示例here in this twigfiddle