有没有办法在django中同时循环两个列表?

mik*_*ike 14 python django django-templates django-views

我有两个相同长度的列表对象,我希望渲染的补充数据有一种方法可以同时渲染两者,即.

{% for i,j in table, total %} 
 {{ i }} 
 {{ j }}
{% endfor %} 
Run Code Online (Sandbox Code Playgroud)

或类似的东西?

pem*_*ahl 31

如果两个列表的长度相同,则可以zipped_data = zip(table, total)在视图中作为模板上下文返回,这将生成一个包含2值元组的列表.

例:

>>> lst1 = ['a', 'b', 'c']
>>> lst2 = [1, 2, 3]
>>> zip(lst1, lst2)
[('a', 1), ('b', 2), ('c', 3)]
Run Code Online (Sandbox Code Playgroud)

在您的模板中,您可以编写:

{% for i, j in zipped_data %}
    {{ i }}, {{ j }}
{% endfor %}
Run Code Online (Sandbox Code Playgroud)

另外,看看Django的有关文档的for模板标签在这里.它提到了使用它的所有可能性,包括很好的例子.

  • @mike你不是傻瓜.不久前我们所有人都在学习Python和Django.Django的文档没有提到Python的`zip`函数,所以这个问题绝对有用.我很高兴能帮助你.:) (3认同)

小智 6

对于此问题的任何最近访问者,forloop.parentloop可以模拟将两个列表压缩在一起:

{% for a in list_a %}{% for b in list_b %}
    {% if forloop.counter == forloop.parentloop.counter %}
        {{a}} {{b}}
    {% endif %}
{% endfor %}{% endfor %}
Run Code Online (Sandbox Code Playgroud)


Aid*_*wen 5

如果这只是变量i并且j您正在查看,那么这应该可行-

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

{% for i, j in data %}
    <tr>
        <td> {{ i }}: </td> <td> {{ j }} </td>
    </tr>
{% endfor %}
Run Code Online (Sandbox Code Playgroud)

(感谢所有回答这个问题的人)


Jor*_*dan 5

使用python的zip功能并将2个列表压缩在一起.

在你看来:

zip(table, list)
Run Code Online (Sandbox Code Playgroud)

在模板中,您可以像简单列表一样迭代它,并使用.0和.1属性分别从表和列表中访问数据.