2015-02-23 61 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

相關問題