如何传递当前上下文以包含在Twig中?

时间:2015-02-23 16:29:11

标签: twig

说我有以下headline.twig部分:

<h2>{{ headline }}</h2>

我想把它包含在两个地方,一次是:

<% for article in teasers %>
  {{ include('headline.twig') }}
<% endfor %>

然后简单地说:

{{ include('headline.twig') }}

是否可以传递include标记或其上下文功能,以便包含&#34;知道&#34;在第一个实例中,headline变量实际上是article.headline

我正在寻找一种系统的方法来做到这一点,而不是像

那样
{{ include('headline.twig', {headline: article.headline}) }}

2 个答案:

答案 0 :(得分:1)

默认情况下,整个上下文会传递给包含的模板。

因此它适用于headline.twig

<h2>{{ article.headline }}</h2>

然后在主模板中,您只需致电:

{% include('headline.twig') %}

但必须在调用article时定义include变量。

答案 1 :(得分:1)

如果您希望headline在所有情况下都位于所包含文件的主要上下文中,您可以执行以下操作:

{% for article in teasers %}
  {% set headline = article.headline %}
  {{ include('headline.twig') }}
{% endfor %}

但如果你以这种方式重新设置它,那么这将覆盖当前上下文中的任何现有headline变量(并且风险重复teasers.article.headline的最后一次迭代的2倍)。 / p>

如果您想保留当前上下文并覆盖headline变量,最佳解决方案是使用merge过滤器:

{% for article in teasers %}
  {{ include('headline.twig', _context|merge({headline: article.headline})) }}
{% endfor %}