树枝添加了白色空间以进行循环



我正在为现有项目添加一个函数,因此我必须使用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.firstloop.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

最新更新