is there a way to loop over two lists simultaneously in django?

巧了我就是萌 提交于 2019-11-28 09:56:27

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.

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.

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)

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

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.

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.

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!