私のviews.pyでは、2タプルのリストを作成しています。タプルの2番目の項目は、次のような別のリストです。
[ Product_Type_1, [ product_1, product_2 ],
Product_Type_2, [ product_3, product_4 ]]
単純な古いPythonでは、次のようにリストを反復できます。
for product_type, products in list:
print product_type
for product in products:
print product
Djangoテンプレートで同じことをすることができないようです:
{% for product_type, products in product_list %}
print product_type
{% for product in products %}
print product
{% endfor %}
{% endfor %}
私はDjangoからこのエラーを受け取ります:
レンダリング中に例外をキャッチ:Zip引数#2は反復をサポートする必要があります
もちろん、テンプレートにはHTMLステートメントがあり、printステートメントはありません。タプルのアンパックはDjangoテンプレート言語ではサポートされていませんか?またはこれを間違った方法で行っていますか?オブジェクトの単純な階層を表示するだけです-製品タイプがいくつかあり、それぞれに複数の製品があります(models.pyでは、ProductにはProduct_typeへの外部キーがあり、単純な1対多の関係です)。
明らかに、私はDjangoの初心者なので、どんな入力でも歓迎します。
{'('と ')'を '['と ']'にそれぞれ交換できることに注意してください。1つはタプル用、もう1つはリスト用です}
[ (Product_Type_1, ( product_1, product_2 )),
(Product_Type_2, ( product_3, product_4 )) ]
テンプレートにこれを行わせます:
{% for product_type, products in product_type_list %}
{{ product_type }}
{% for product in products %}
{{ product }}
{% endfor %}
{% endfor %}
forループでタプル/リストを展開する方法は、リスト反復子によって返されるアイテムに基づいています。各反復で1つのアイテムのみが返されました。ループの最初はProduct_Type_1、2番目は製品のリスト...
別の方法は次のとおりです。
タプルのリストがある場合は言う:
mylst = [(a, b, c), (x, y, z), (l, m, n)]
次に、次の方法でテンプレートファイルにこのリストを展開できます。私の場合、ドキュメントのURL、タイトル、および要約を含むタプルのリストがありました。
{% for item in mylst %}
{{ item.0 }} {{ item.1}} {{ item.2 }}
{% endfor %}
次の方法で使用する必要があります。
{% for product_type, products in product_list.items %}
print product_type
{% for product in products %}
print product
{% endfor %}
{% endfor %}
辞書データの変数項目を忘れないでください
タプルに固定数がある場合は、単にインデックスを使用できます。辞書を混在させる必要があり、値はタプルだったので、これを行いました:
ビューで:
my_dict = {'parrot': ('dead', 'stone'), 'lumberjack': ('sleep_all_night', 'work_all_day')}
テンプレートで:
<select>
{% for key, Tuple in my_dict.items %}
<option value="{{ key }}" important-attr="{{ Tuple.0 }}">{{ Tuple.1 }}</option>
{% endfor %}
</select>
テンプレートに製品タイプのリストを送信し、次のようなことを行うだけです。
{% for product_type in product_type_list %}
{{ product_type }}
{% for product in product_type.products.all %}
{{ product }}
{% endfor %}
{% endfor %}
少し前のことなので、構文が何であるかを正確に思い出せません。それが機能するかどうかを教えてください。 ドキュメント を確認してください。