[英]Interpolate Twig variable/attribute inside value of another Twig attribute definition
采取以下示例結構:
{% set paths = {
...
'js': {
...
'jquery': {
'version': '1.7.2',
'cdn': 'https://ajax.googleapis.com/ajax/libs/jquery/{{paths.js.jquery.version}}/jquery.min.js',
'fallback': ....
}
}
}
%}
要訪問,我通常會使用類似:
<script src="{{paths.js.jquery.cdn}}"></script>
無法識別插值變量,您將得到類似...libs/jquery/%7B%7B%paths.js/jquery.version7D%7D/jquery.min.js...
。
我試過了:
'a': 'text{{b}}text'
, 'a': {{ ('text' ~ b ~ 'text') }}
, 'a': "{{ ('text' ~ b ~ 'text') }}"
, 'a': "{{ (['text', b, 'text'] | join }}"
, 'a': "{{ (['text', {{b}}, 'text'] | join }}"
沒有太多的文檔,但是從我的角度來看,它一定是這樣的:
attribute(paths, attribute(js, attribute(jquery, cdn)))
只適合一個級別,但不適合任意深度。 如果我誤解了attribute()
請糾正我。
'a': ('text' ~ b ~ 'text'
)實際上是正確的,但是表達式周圍不能有花括號(因為我們已經在表達式內部,變量定義了)。
正確的方法:
{% set paths = {
...
'js': {
...
'jquery': {
'version': '1.7.2',
'cdn': ('https://ajax.googleapis.com/ajax/libs/jquery/' ~ paths.js.jquery.version ~ '/jquery.min.js'),
'fallback': ....
}
}
}
%}
但是這里存在簡單的設計錯誤; 當渲染器/解析器進入cdn
屬性定義時,尚未設置paths
。 解決這個問題的一種可能方法是先聲明另一個變量。
{% set params= {
'jqueryversion': '1.7.2'
}
%}
{% set paths = {
...
'js': {
...
'jquery': {
'cdn': ('https://ajax.googleapis.com/ajax/libs/jquery/' ~ params.jqueryversion ~ '/jquery.min.js'),
'fallback': ....
}
}
}
%}
顯然,如果paths.js.jquery.cdn
只會使用一次,然后就硬編碼在你需要它和插值孩子變量父變量的值:
<script src="https://ajax.googleapis.com/ajax/libs/jquery/{{params.jqueryversion}}/jquery.min.js"></script>
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.