65

私の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 にまったく慣れていないので、どんな意見も歓迎します。

4

5 に答える 5

89

別の方法は次のとおりです。

タプルのリストがある場合は、次のように言います。

mylst = [(a, b, c), (x, y, z), (l, m, n)]

次に、次の方法でこのリストをテンプレートファイルに解凍できます。私の場合、ドキュメントのURL、タイトル、および要約を含むタプルのリストがありました。

{% for item in mylst %}    
     {{ item.0 }} {{ item.1}} {{ item.2 }}    
{% endfor %}
于 2011-01-21T08:23:38.587 に答える
71

{'(' と ')' はそれぞれ '[' と ']' に交換できることに注意してください。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 つのアイテムのみが返されました。1 回目のループでは Product_Type_1、2 回目の製品リスト...

于 2008-11-07T03:11:51.783 に答える
8

次のように使用する必要があります。

{% for product_type, products in product_list.items %}
    {{ product_type }}
    {% for product in products %}
       {{ product }}
    {% endfor %}
{% endfor %}

辞書データの変数項目を忘れないでください

于 2009-07-22T21:41:13.840 に答える
2

テンプレートに製品タイプのリストを送信して、次のようにするだけです。

{% for product_type in product_type_list %}
    {{ product_type }}
    {% for product in product_type.products.all %}
        {{ product }}
    {% endfor %}
{% endfor %}

少し時間が経っているので、構文が何であるかを正確に思い出せません。それが機能するかどうか教えてください。ドキュメントを確認してください。

于 2008-11-07T02:47:41.320 に答える