how to iterate through dictionary in a dictionary in django template?

how to iterate through dictionary in a dictionary in django template?

My dictionary looks like this(Dictionary within a dictionary):
{'0': {
    'chosen_unit': ,
    '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',
}}

Now I'm just trying to display the information on my template but I'm struggling. My code for the template looks like:
{% if landing_dict.ingredients %}
  
{% for ingredient in landing_dict.ingredients %} {{ ingredient }} {% endfor %} Print {{ landing_dict.recipe_name }} {% else %} Please search for an ingredient below {% endif %} It just shows me '0' on my template? I also tried: {% for ingredient in landing_dict.ingredients %} {{ ingredient.cost }} {% endfor %} This doesn't even display a result. I thought perhaps I need to iterate one level deeper so tried this: {% if landing_dict.ingredients %}
{% for ingredient in landing_dict.ingredients %} {% for field in ingredient %} {{ field }} {% endfor %} {% endfor %} Print {{ landing_dict.recipe_name }} {% else %} Please search for an ingredient below {% endif %} But this doesn't display anything. What am I doing wrong?

Solutions/Answers:

Answer 1:

Lets say your data is –

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

You can use the data.items() method to get the dictionary elements. Note, in django templates we do NOT put (). Also some users mentioned values[0] does not work, if that is the case then try 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>

Am pretty sure you can extend this logic to your specific dict.


To iterate over dict keys in a sorted order – First we sort in python then iterate & render in django template.

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

In template file:

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

Answer 2:

This answer didn’t work for me, but I found the answer myself. No one, however, has posted my question. I’m too lazy to
ask it and then answer it, so will just put it here.

This is for the following query:

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

In template:

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

References