2011-11-05 29 views
70

từ điển của tôi trông như thế này (điển trong một cuốn từ điển):cách lặp qua từ điển trong từ điển trong mẫu django?

{ '0': { 'chosen_unit':, 'chi phí': Decimal ('10 0,0000'), 'unit__name_abbrev': u'G ',' supplier_ nhà cung cấp ': u "Thịt của Steve Locker",' price ': Decimal (' 5.00 '),' nhà cung cấp _address ': u'No \ r \ naddress here', 'selected_unit_amount': u ' 2' , 'city_ name': u'Joburg, Trung', 'nhà cung cấp _phone_number': u'02299944444' , 'supplier_ trang web': Không, 'nhà cung cấp _price_list': u '', 'supplier_ email': u'[email protected] ' 'đơn vị _name': u'Gram', 'name': u'Rump xương '}}

Bây giờ tôi m chỉ cố gắng hiển thị thông tin trên mẫu của tôi nhưng tôi đang gặp khó khăn. Mã của tôi cho mẫu trông giống như:

 {% 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 %} 

Nó chỉ hiển thị cho tôi '0' trên mẫu của tôi?

Tôi cũng đã cố gắng:

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

này thậm chí không hiển thị kết quả.

Tôi nghĩ có lẽ tôi cần phải lặp một mức độ sâu hơn để cố gắng này:

 {% 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 %} 

Nhưng điều này không hiển thị bất cứ điều gì.

Tôi đang làm gì sai?

Trả lời

163

phép nói rằng dữ liệu của bạn -

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

Bạn có thể sử dụng phương pháp data.items() để có được những yếu tố điển. Lưu ý, trong các mẫu django, chúng tôi KHÔNG đặt (). Một số người dùng được đề cập đến values[0] không hoạt động, nếu đúng như vậy, hãy thử 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> 

Bạn chắc chắn bạn có thể mở rộng logic này cho chính tả cụ thể của mình.


Để lặp trên phím dict theo một thứ tự sắp xếp - Đầu tiên chúng tôi sắp xếp trong python sau đó lặp & render trong mẫu django.

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

Trong template file:

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

nhờ cho câu trả lời của bạn. Tôi có recipe_name một cấp lên và không cho thấy mức độ của từ điển. Cảm ơn bạn vì câu trả lời! Tôi không thể sử dụng 'giá trị [0]' thay vào đó tôi đã phải 'values.items' – darren

+0

cool! vui mừng chia sẻ những gì tôi biết. Mã đã được gõ tay miễn phí, vì vậy một số sai lầm là không thể tránh khỏi. –

+1

Cảm ơn bạn đã đề cập đến '.items'. Tài liệu 'https: // docs.djangoproject.com/vi/1.4/topics/templates /' đưa ra một ví dụ không hoạt động, nhưng không có ví dụ nào hoạt động. '{% cho k, v trong dict%}' cho kết quả kỳ lạ - k là ký tự đầu tiên của mỗi khóa và v là trống, trong khi '{% cho k trong dict%}' trả về khóa đầy đủ nhưng không có cách nào để lấy giá trị (vì 'dict.k' coi k là ký tự chữ). – Dave

Các vấn đề liên quan