20

レンダリングしたい補完的なデータを持つ同じ長さの 2 つのリスト オブジェクトがあります。つまり、両方を同時にレンダリングする方法はありますか。

{% for i,j in table, total %} 
 {{ i }} 
 {{ j }}
{% endfor %} 

または似たようなものですか?

4

6 に答える 6

44

両方のリストの長さが同じである場合はzipped_data = zip(table, total)、ビューのテンプレートコンテキストとして返すことができます。これにより、2値のタプルのリストが生成されます。

例:

>>> lst1 = ['a', 'b', 'c']
>>> lst2 = [1, 2, 3]
>>> zip(lst1, lst2)
[('a', 1), ('b', 2), ('c', 3)]

テンプレートに、次のように記述できます。

{% for i, j in zipped_data %}
    {{ i }}, {{ j }}
{% endfor %}

また、ここでforテンプレートタグに関するDjangoのドキュメントを参照してください。それはあなたがそれを使うために持っているすべての可能性を素晴らしい例を含めて述べています。

于 2013-02-12T20:44:51.370 に答える
5

Pythonのzip関数を使用して、2つのリストを一緒に圧縮します。

あなたの見解では:

zip(table, list)

テンプレートでは、これを単純なリストのように繰り返し、.0プロパティと.1プロパティを使用して、それぞれテーブルとリストのデータにアクセスできます。

于 2013-02-12T20:44:15.680 に答える
5

それが単なる変数iでありj、あなたが見ているのであれば、これはうまくいくはずです-

return render_to_response('results.html',
    {'data': zip(table, list)})

{% for i, j in data %}
    <tr>
        <td> {{ i }}: </td> <td> {{ j }} </td>
    </tr>
{% endfor %}

(この質問に答えてくれた他のすべての人に感謝します)

于 2013-02-12T20:41:42.610 に答える
1

ビューでこれを行う必要があります-組み込みのzip関数を使用してタプルのリストを作成し、テンプレートでそれを繰り返し処理します。

テンプレートロジックは意図的に単純であり、少しでも複雑なものはすべてビューで実行する必要があります。

于 2013-02-12T20:45:12.930 に答える
1

ディクショナリを使用するのではなく (ソートを保証しません)、zip2 つのリストで python 関数を使用して、それをテンプレートに渡します。

于 2013-02-12T20:43:23.193 に答える