web-dev-qa-db-ja.com

JINJA2のリストを連結する

Jinja2で2つのリスト変数を連結するにはどうすればよいですか?

例えば。

GRP1 = [1, 2, 3]
GRP2 = [4, 5, 6]

{# This works fine: #}
{% for M in GRP1 %}
    Value is {{M}}
{% endfor %}


{# But this does not: #}
{% for M in GRP1 + GRP2 %}
    Value is {{M}}
{% endfor %}

したがって、(Pythonの場合と同様に)+を使用して2つのリストを連結しようとしましたが、リストではなく、python xrangeオブジェクトであることがわかります。

jijna2 error: unsupported operand type(s) for +: 'xrange' and 'xrange'

同じforループでGRP1とGRP2の連結を反復する方法はありますか?

18
ccbunney

私の知る限り、ネイティブのJinja2テンプレートを使用してそれを行うことはできません。新しい結合イテラブルを作成し、それをテンプレートに渡すとよいでしょう。例:

from itertools import chain

x = xrange(3)
y = xrange(3, 7)
z = chain(x, y) # pass this to your template
for i in z:
    print i

コメントに従って、イテラブルをリストに明示的に変換し、それらを連結することができます:

{% for M in GRP1|list + GRP2|list %}
18
Jon Clements

{{ GRP1 + GRP2 }}のような連結リストは、より少ないjinja2バージョンv.2.9.5で利用できます。

@Hsiaoは元々この回答をコメントとして与えました

0
Jordan Stewart