我有两个相同长度的列表对象,我希望渲染的补充数据有一种方法可以同时渲染两者。
{% for i,j in table, total %}
{{ i }}
{{ j }}
{% endfor %}
或类似的东西?
答案 0 :(得分:30)
如果两个列表的长度相同,则可以在视图中返回zipped_data = zip(table, total)
作为模板上下文,从而生成一个包含2值元组的列表。
示例:
>>> lst1 = ['a', 'b', 'c']
>>> lst2 = [1, 2, 3]
>>> zip(lst1, lst2)
[('a', 1), ('b', 2), ('c', 3)]
在模板中,您可以写:
{% for i, j in zipped_data %}
{{ i }}, {{ j }}
{% endfor %}
另外,请查看Django关于for
模板标记here的文档。它提到了使用它的所有可能性,包括很好的例子。
答案 1 :(得分:5)
使用python的zip功能并将2个列表压缩在一起。
在您看来:
zip(table, list)
在模板中,您可以像简单列表一样迭代它,并使用.0和.1属性分别从表和列表中访问数据。
答案 2 :(得分:3)
如果只是您正在查看的变量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 %}
(感谢所有回答此问题的人)
答案 3 :(得分:2)
对于此问题的最近访问者,forloop.parentloop可以模仿两个列表的压缩:
{% for a in list_a %}{% for b in list_b %}
{% if forloop.counter == forloop.parentloop.counter %}
{{a}} {{b}}
{% endif %}
{% endfor %}{% endfor %}
答案 4 :(得分:1)
不是使用字典(不保证任何类型的排序),而是在两个列表上使用python zip
函数并将其传递给模板。
答案 5 :(得分:1)
您必须在视图中执行此操作 - 使用内置zip函数创建元组列表,然后在模板中迭代它。
模板逻辑非常简单,任何甚至稍微复杂的都应该在视图中完成。