2015-02-23 57 views
1

说我有以下headline.twig部分:如何传递当前上下文以包含在Twig中?

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

,我想包括它在两个地方,曾经为:

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

,然后简单地:

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

是它可能会传递一个include标签或其功能的上下文,以便包含“知道”,在第一个实例中,变量为headline var实际上是article.headline

我正在寻找一种系统的方法来做到这一点,不喜欢的东西

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

回答

1

如果你想headline是在所有情况下的包含文件的主要方面,你可以做这样的事情:

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

但是,这将覆盖任何现有headline变量在当前的背景下,如果你重新设置这种方式(并且重复2次最后一次迭代teasers.article.headline的风险)。

,如果你想保持当前的背景下,并覆盖headline变量最好的解决办法是使用merge过滤器:

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

谢谢。我希望得到一个比合并过滤器更简单的解决方案(有时可能会非常笨拙),但我想那里并不是一个 – TxH 2015-02-24 15:47:06

1

默认情况下,整个上下文传递到包括模板。

所以它会在headline.twig工作:

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

然后在主模板,你只叫:

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

article变量必须在调用include的时刻来定义。

+0

谢谢,但并没有真正解决这个问题对我来说。你的建议非常像'{{include('headline.twig',{headline:article.headline})}}',只是在相反的方向 – TxH 2015-02-24 00:27:33

相关问题