कैसे django टेम्पलेट में एक शब्दकोश में शब्दकोश के माध्यम से पुनरावृति करने के लिए?


128

मेरा शब्दकोश इस तरह दिखता है (शब्दकोश के भीतर शब्दकोश):

{'0': {
    'chosen_unit': <Unit: Kg>,
    'cost': Decimal('10.0000'),
    'unit__name_abbrev': u'G',
    'supplier__supplier': u"Steve's Meat Locker",
    'price': Decimal('5.00'),
    'supplier__address': u'No\r\naddress here',
    'chosen_unit_amount': u'2',
    'city__name': u'Joburg, Central',
    'supplier__phone_number': u'02299944444',
    'supplier__website': None,
    'supplier__price_list': u'',
    'supplier__email': u'ss.sss@ssssss.com',
    'unit__name': u'Gram',
    'name': u'Rump Bone',
}}

अब मैं केवल अपने टेम्प्लेट पर जानकारी प्रदर्शित करने का प्रयास कर रहा हूं, लेकिन मैं संघर्ष कर रहा हूं। टेम्पलेट के लिए मेरा कोड इस तरह दिखता है:

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

यह एक परिणाम भी प्रदर्शित नहीं करता है।

मैंने सोचा कि शायद मुझे एक स्तर को गहरा करने की आवश्यकता है इसलिए यह कोशिश की:

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

लेकिन यह कुछ भी प्रदर्शित नहीं करता है।

मैं क्या गलत कर रहा हूं?

जवाबों:


258

कहते हैं कि आपका डेटा है -

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>

बहुत यकीन है कि आप इस तर्क को अपने विशिष्ट ताना-बाना तक बढ़ा सकते हैं।


क्रमबद्ध क्रम में तानाशाही कुंजियों पर पुनरावृत्ति करने के लिए - पहले हम अजगर में क्रमबद्ध करते हैं और फिर 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 %}

2
आपके उत्तर के लिए धन्यवाद। मेरे पास एक स्तर तक रेसिपी_नाम है और डिक्शनरी का वह स्तर नहीं दिखा। आपके उत्तर के लिए धन्यवाद! मैं का उपयोग नहीं कर सकता है values[0]बजाय मैं करना पड़ाvalues.items
डैरेन

ठंडा! जो मुझे पता था उसे साझा करने में खुशी हुई। कोड मुक्त हाथ से टाइप किया गया था, इसलिए कुछ गलतियाँ अपरिहार्य हैं।
४४ पर श्रीकर अप्पलाराजु

1
उल्लेख करने के लिए धन्यवाद .items। प्रलेखन https://docs.djangoproject.com/en/1.4/topics/templates/एक उदाहरण देता है जो काम नहीं करता है, लेकिन कोई उदाहरण काम नहीं करता है। {% for k,v in dict %}विचित्र परिणाम देता है - k हर कुंजी का पहला वर्ण है और v रिक्त है, जबकि {% for k in dict %}पूर्ण कुंजी लौटाता है, लेकिन मूल्यों को प्राप्त करने का कोई तरीका नहीं है (क्योंकि dict.kशाब्दिक वर्ण के रूप में k को मानता है)।
डेव

2
अपवित्र :-)। भविष्य के पाठकों के लिए, टैग और फ़िल्टर https://docs.djangoproject.com/en/1.8/ref/templates/builtins/#forदस्तावेज़ों को संदर्भित करते हैं, साथ ही फ़ोरलॉप चर जो किसी सूची को प्रारूपित करते समय सहायक हो सकते हैं।
डेव

1
values.items+1
केविन_टीए

3

यह जवाब मेरे काम नहीं आया, लेकिन मुझे खुद ही जवाब मिल गया। हालाँकि, किसी ने भी मेरा प्रश्न पोस्ट नहीं किया है। मैं इसे पूछने के लिए बहुत आलसी हूं और फिर इसका जवाब देता हूं, इसलिए इसे यहां डाल दूंगा।

यह निम्नलिखित प्रश्न के लिए है:

data = Leaderboard.objects.filter(id=custom_user.id).values(
    'value1',
    'value2',
    'value3')

टेम्पलेट में:

{% for dictionary in data %}
  {% for key, value in dictionary.items %}
    <p>{{ key }} : {{ value }}</p>
  {% endfor %}
{% endfor %}

0

यदि आप dataएक टेम्पलेट के संदर्भ के रूप में एक चर (शब्दकोश प्रकार) पास करते हैं , तो आपको कोड होना चाहिए:

{% for key, value in data.items %}
    <p>{{ key }} : {{ value }}</p> 
{% endfor %}
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.