【发布时间】:2020-07-23 17:38:04
【问题描述】:
我有两个长度相同的列表对象以及我想要渲染的互补数据有没有一种方法可以同时渲染两者,即。
{% for i,j in table, total %}
{{ i }}
{{ j }}
{% endfor %}
或类似的东西?
【问题讨论】:
标签: python django django-templates django-views
我有两个长度相同的列表对象以及我想要渲染的互补数据有没有一种方法可以同时渲染两者,即。
{% for i,j in table, total %}
{{ i }}
{{ j }}
{% endfor %}
或类似的东西?
【问题讨论】:
标签: python django django-templates django-views
如果两个列表的长度相同,您可以在视图中返回 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 的信息。它提到了你使用它的所有可能性,包括很好的例子。
【讨论】:
zip 函数,所以这个问题肯定很有用。我很高兴能帮助你。 :)
对于此问题的任何最近访问者,forloop.parentloop 可以模拟两个列表的压缩:
{% for a in list_a %}{% for b in list_b %}
{% if forloop.counter == forloop.parentloop.counter %}
{{a}} {{b}}
{% endif %}
{% endfor %}{% endfor %}
【讨论】:
使用 python 的 zip 函数将 2 个列表压缩在一起。
在你看来:
zip(table, list)
在您的模板中,您可以像简单列表一样对其进行迭代,并使用 .0 和 .1 属性分别访问表和列表中的数据。
【讨论】:
如果您正在查看的只是变量 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 %}
(感谢所有回答此问题的人)
【讨论】:
不要使用字典(不保证任何排序),而是在两个列表上使用 python zip 函数并将其传递给模板。
【讨论】:
您必须在视图中执行此操作 - 使用内置的 zip 函数创建一个元组列表,然后在模板中对其进行迭代。
模板逻辑很简单,任何稍微复杂的事情都应该在视图中完成。
【讨论】: