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

前端 未结 6 1199
小鲜肉
小鲜肉 2020-12-01 16:08

I have two list objects of the same length with complementary data i want to render is there a way to render both at the same time ie.

{% for i,j in table,          


        
相关标签:
6条回答
  • 2020-12-01 16:46

    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.

    0 讨论(0)
  • 2020-12-01 16:49

    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.

    0 讨论(0)
  • 2020-12-01 16:51

    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.

    0 讨论(0)
  • 2020-12-01 16:55

    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)

    0 讨论(0)
  • 2020-12-01 17:03

    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 %}
    
    0 讨论(0)
  • 2020-12-01 17:04

    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.

    0 讨论(0)
提交回复
热议问题