web-dev-qa-db-ja.com

Jinjaでの文字列連結

既存のリストをループして、そこからコンマ区切りの文字列を作成したいだけです。
このようなもの: my_string = 'stuff, stuff, stuff, stuff'

私はすでにloop.last、WORKの下のコードの3行目を作成する方法を知る必要があります。

{% set my_string = '' %}
{% for stuff in stuffs %}
{% set my_string = my_string + stuff + ', '%}
{% endfor%}
38
KacieHouser

stuffsが文字列のリストである場合、これだけで機能します。

{{ stuffs|join(", ") }}

リンク ドキュメントへ。

65
bernie

すべての値が文字列であることがわかっている場合は、+を使用できます。 Jinjaは~演算子も提供します。これにより、すべての値が最初に文字列に変換されます。

{% set my_string = my_string ~ stuff ~ ', '%}
15
Dag Wieers

私の悪い、それを単純化しようとして、私は行き過ぎました、実際にはstuffsはあらゆる種類の情報の記録であり、その中にIDが欲しいだけです。

stuffs = [[123, first, last], [456, first, last]]

が欲しいです my_sting することが

my_sting = '123, 456'

私の元のコードは次のようになっているはずです。

{% set my_string = '' %}
{% for stuff in stuffs %}
{% set my_string = my_string + stuff.id + ', '%}
{% endfor%}

考えてみると、stuffsはおそらく辞書ですが、要点はわかります。

はい、joinフィルターを見つけました。次のようにアプローチします。

 {% set my_string = [] %}
 {% for stuff in stuffs %}
 {% do my_string.append(stuff.id) %}
 {% endfor%}
 {%  my_string|join(', ') %}

しかし、追加機能は拡張機能をインポートしないと機能しません。そのドキュメントを読むと頭痛の種になります。それはどこからインポートするのか、インポートステートメントをどこに置くのかを明示していないので、連結する方法を見つけることは2つの悪の少ない方だと思いました。

8
KacieHouser

ちょうど別のハックはこのようにすることができます。

連結する必要がある文字列の配列があります。だから私はその配列を辞書に追加し、それが動作するforループ内で使用しました。

{% set dict1 = {'e':''} %}
{% for i in list1 %}
{% if dict1.update({'e':dict1.e+":"+i+"/"+i}) %} {% endif %}
{% endfor %}
{% set layer_string = dict1['e'] %}
1
Kapil

フィルター結合を使用できないが、配列のエントリに対していくつかの操作を実行する必要がある場合:

{% for entry in array %}
User {{ entry.attribute1 }} has id {{ entry.attribute2 }}
{% if not loop.last %}, {% endif %}
{% endfor %}
0
Jakub N