我正在为现有项目添加一个函数,因此我必须使用twig。我正在显示一个单词的翻译,所以我有一个对象列表。该对象具有多个属性。
{% for trans in Translations.dictionaryList[0].wordTranslationsList|sortLangAndFreqClass %}
{% if currentLanguage is not same as (trans.targetLanguage) %}
{% set currentLanguage = trans.targetLanguage %}
{% set first = TRUE %}<b> {{- Languages[(currentLanguage |upper)] -}}: </b>
{% endif %}
{% if not first %}, {% endif %}
<a href="{{'res'|url({'view_language' : view_language, 'corpusId': trans.corpus, 'word' : trans.translation})}}">{{- trans.translation -}}</a> ({{- trans.freqClass -}})
{% set first = FALSE %}
{% endfor %}
输出类似:丹麦语:HUS(10(英语:家庭(6(,商务(7(,家庭(7(,Live(8(,House(8(
但我想在逗号之前删除白色空间,所以应该是:
丹麦语:HUS(10(英语:家庭(6(,商业(7(,家庭(7(,Live(8(,House(8(
我找到了将所有内容写入一行的解决方案,但这非常丑陋,无法阅读。还有其他方法可以解决此问题吗?
我相信这不是树枝问题,而只是HTML的工作原理。在常规的HTML中,如果您在任何字符之前都有新线,则将转换为常规空间。
<p>something
,
another thing</p>
将显示为
something , another thing
现在,查看树枝文档[1],我发现在任何环中都有一个隐式变量loop
(例如您正在使用的for(。该变量的两个属性是loop.first
和loop.last
,它告诉您当前元素是第一个元素还是最后一个元素。
您可以使用第一个方法,而是使用最后一个元素,并且具有类似的东西
{% for trans in Translations.dictionaryList[0].wordTranslationsList|sortLangAndFreqClass %}
{% if currentLanguage is not same as (trans.targetLanguage) %}
{% set currentLanguage = trans.targetLanguage %}
<b> {{- Languages[(currentLanguage |upper)] -}}: </b>
{% endif %}
<a href="{{'res'|url({'view_language' : view_language, 'corpusId': trans.corpus, 'word' : trans.translation})}}">{{- trans.translation -}}</a> ({{- trans.freqClass -}}){% if not loop.last %}, {% endif %}
{% endfor %}
注意我如何在<a>
标签行上附加{% if not loop.last %}, {% endif %}
。
我不能保证它会起作用,因为我没有如何在这里尝试它,但要试一试。
[1] - https://twig.symfony.com/doc/2.x/tags/for.html#the-loop-variable
您可以像这样单行:
{% set items = [ 'foo', 'bar', 'foobar', 'barfoo', ] %}
{% for item in items %}
{{- ((not loop.first ? ', ')~'<a href="http://www.example.com#'~item~'">'~item~'</a>') | raw -}}
{% endfor %}
demo