Jinja2でコード生成を行っていますが、2つのリスト(つまり、変数名と型)を一緒に繰り返し処理したいのですが、これを行う簡単な方法はありますか、それとも事前に圧縮されたリストを渡す必要がありますか?ドキュメントやグーグルでそのような関数を見つけることができませんでした。
質問する
20551 次
4 に答える
23
Flaskを使用しているかどうかについて言及しなかったので、調査結果を追加すると思いました。
Flask で使用される Jinja2 環境で関数をrender_template()
使用して 'zip' フィルターを作成することによって使用されます。zip()
app = Flask(__name__)
...
app.jinja_env.filters['zip'] = zip
これをテンプレート内で使用するには、次のようにします。
{% for value1, value2 in iterable1|zip(iterable2) %}
{{ value1 }} is paired with {{ value2 }}
{% endfor %}
文字列は反復可能な Jinja2 であることに注意してください。そのため、文字列に圧縮しようとすると、おかしなことになるでしょう。圧縮したいものが文字列ではなく反復可能であることを確認するには、次のようにします。
{% if iterable1 is iterable and iterable1 is not string
and iterable2 is iterable and iterable2 is not string %}
{% for value1, value2 in iterable1|zip(iterable2) %}
{{ value1 }} is paired with {{ value2 }}
{% endfor %}
{% else %}
{{ iterable1 }} is paired with {{ iterable2 }}
{% endif %}
于 2017-09-29T19:04:28.640 に答える
3
テンプレート言語では、for ループで 2 つのコンテナーの zip を実行できるとは思いません。これはdjangoに対する同様の質問であり、jinjaテンプレートはdjangoに非常に近いものです。
圧縮されたコンテナーを事前にビルドし、テンプレートに渡します。
>> for i,j in zip(range(10),range(20,30)):
... print i,j
...
に等しい
>>> [(i,j) for i,j in zip(range(10),range(20,30))]
于 2011-03-06T02:42:03.007 に答える