2011-11-05 25 views
70

私の辞書は、この(辞書内の辞書)のようになります。djangoテンプレートのディクショナリで辞書を反復処理する方法は?

{ '0':{ 'chosen_unit': 'コスト':小数('10 .0000' )、 'unit__name_abbrev':u'G '、' supplier 'サプライヤ:u "Steve's Meat ロッカー"、 "price":10進数(' 5.00 ')、'サプライヤ _address ': ここにはありません\ r \ naddress'、 'selected_unit_amount':u ' ': u'Joburg、中央」、 'サプライヤー _phone_number': ':なし、 'サプライヤー _price_list':U '' は、u'02299944444' 、 は' ウェブサイトをsupplier_ 2' 、' 名前をcity_ '今、私は

}}' u'Rumpボーン: ':u'Gram ' '名前' u'[email protected]'、' 単位
_name:は 'メールをsupplier_'私のテンプレートに情報を表示しようとしていますが、私は苦労しています。テンプレートのコードは次のようになります。

 {% if landing_dict.ingredients %} 
      <hr> 
      {% for ingredient in landing_dict.ingredients %} 
       {{ ingredient }} 
      {% endfor %} 
      <a href="/">Print {{ landing_dict.recipe_name }}</a> 
     {% else %} 
      Please search for an ingredient below 
     {% endif %} 

テンプレートに「0」と表示されますか?

私も試してみました:

  {% for ingredient in landing_dict.ingredients %} 
       {{ ingredient.cost }} 
      {% endfor %} 

これはでも、結果は表示されません。

私はこの試みた、私は深い1つのレベルを反復処理する必要があるかもしれないと思った:

 {% if landing_dict.ingredients %} 
      <hr> 
      {% for ingredient in landing_dict.ingredients %} 
       {% for field in ingredient %} 
        {{ field }} 
       {% endfor %} 
      {% endfor %} 
      <a href="/">Print {{ landing_dict.recipe_name }}</a> 
     {% else %} 
      Please search for an ingredient below 
     {% endif %} 

をしかし、これは何も表示されません。

私は間違っていますか?

答えて

163

あなたのデータがあるとしましょう -

data = {'a': [ [1, 2] ], 'b': [ [3, 4] ],'c':[ [5,6]] }

あなたが辞書の要素を取得するためにdata.items()メソッドを使用することができます。 djangoのテンプレートでは、()を入れないことに注意してください。また、values[0]と言われているユーザーもいますが、その場合はvalues.itemsを試してみてください。

<table> 
    <tr> 
     <td>a</td> 
     <td>b</td> 
     <td>c</td> 
    </tr> 

    {% for key, values in data.items %} 
    <tr> 
     <td>{{key}}</td> 
     {% for v in values[0] %} 
     <td>{{v}}</td> 
     {% endfor %} 
    </tr> 
    {% endfor %} 
</table> 

あなたはこのロジックをあなたの特定のディクテーションに拡張することができますか。


ソート順にdictのキーを反復する - まず、私たちは、ソートのpythonで、その後反復& Djangoテンプレートでレンダリングします。テンプレートファイルで

return render_to_response('some_page.html', {'data': sorted(data.items())})

:あなたの答えのための

{% for key, value in data %} 
    <tr> 
     <td> Key: {{ key }} </td> 
     <td> Value: {{ value }} </td> 
    </tr> 
{% endfor %} 
+1

感謝。 recipe_nameが1レベル上にあり、辞書のレベルが表示されませんでした。あなたの答えをありがとう!代わりに 'values.items'に' values [0] 'を使うことができませんでした。 – darren

+0

cool!私が知っていたものを共有することはうれしい。コードはフリーハンドで入力されていたので、いくつかの間違いは避けられません。 –

+1

「.items」に言及してくれてありがとう。ドキュメント 'https:// docs.djangoproject.com/en/1.4/topics/templates /'は動作しない例を示しますが、動作する例はありません。 '{%for k、dict%}}'は、すべてのキーの最初の文字であり、vは空白です。 ( 'dict.k'はkをリテラル文字として扱います)。 – Dave