[Django]-Is there a way to loop over two lists simultaneously in django?

45๐Ÿ‘

โœ…

If both lists are of the same length, you can return zipped_data = zip(table, total) as template context in your view, which produces a list of 2-valued tuples.

Example:

>>> lst1 = ['a', 'b', 'c']
>>> lst2 = [1, 2, 3]
>>> zip(lst1, lst2)
[('a', 1), ('b', 2), ('c', 3)]

In your template, you can then write:

{% for i, j in zipped_data %}
    {{ i }}, {{ j }}
{% endfor %}

Also, take a look at Djangoโ€™s documentation about the for template tag here. It mentions all possibilities that you have for using it including nice examples.

๐Ÿ‘คpemistahl

7๐Ÿ‘

For any recent visitors to this question, forloop.parentloop can mimic the zipping of two lists together:

{% for a in list_a %}{% for b in list_b %}
    {% if forloop.counter == forloop.parentloop.counter %}
        {{a}} {{b}}
    {% endif %}
{% endfor %}{% endfor %}
๐Ÿ‘คMelipone

5๐Ÿ‘

If itโ€™s just the variables i and j that youโ€™re looking at then this should work โ€“

return render_to_response('results.html',
    {'data': zip(table, list)})

{% for i, j in data %}
    <tr>
        <td> {{ i }}: </td> <td> {{ j }} </td>
    </tr>
{% endfor %}

(credit to everyone else who answered this question)

๐Ÿ‘คAidan Ewen

5๐Ÿ‘

Use pythonโ€™s zip function and zip the 2 lists together.

In your view:

zip(table, list)

In your template, you can iterate this like a simple list, and use the .0 and .1 properties to access the data from table and list, respectively.

๐Ÿ‘คJordan

1๐Ÿ‘

Rather than using a dictionary (which does not guarantee any kind of sorting), use the python zip function on the two lists and pass it to the template.

๐Ÿ‘คUku Loskit

1๐Ÿ‘

Youโ€™ll have to do this in the view โ€“ use the builtin zip function to make a list of tuples, then iterate over it in the template.

Template logic is purposely simple, anything even slightly complex should be done in the view.

๐Ÿ‘คBen

Leave a comment