Django循环中计数器索引列表

17 投票
6 回答
20118 浏览
提问于 2025-04-16 10:13

我正在把两个列表传递给一个模板。通常,如果我只需要遍历一个列表,我会这样做:

{% for i in list %}

但是我有两个列表需要同时访问,也就是说,一个列表中的第n个项目和另一个列表中的第n个项目是对应的。我想过用一个列表来循环,然后用forloop.counter0来访问另一个列表中的项目,但我不知道该怎么写才能实现这个功能。

谢谢

6 个回答

8

听起来你在找我的 django-multiforloop。在说明文档里提到:

使用这个模板

{% load multifor %}
{% for x in x_list; y in y_list %}
  {{ x }}:{{ y }}
{% endfor %}

配合这个上下文

context = {
    "x_list": ('one', 1, 'carrot'),
    "y_list": ('two', 2, 'orange')
}

将会输出

one:two
1:2
carrot:orange
21

为了通过一个循环计数器来访问一个可迭代的对象,我写了一个非常简单的过滤器:

from django import template

register = template.Library()

@register.filter
def index(sequence, position):
    return sequence[position]

然后我可以在我的模板中使用它(别忘了加载它):

{% for item in iterable1 %}
  {{ iterable2|index:forloop.counter0 }}
{% endfor %}

希望这能帮助到其他人!

29

你不能这样做。简单的方法是先把你的数据处理成一个压缩列表,像这样:

在你的视图中:

x = [1, 2, 3]
y = [4, 5, 6]
zipped = zip(x, y)

然后在你的模板里:

{% for x, y in zipped %}
    {{ x }} - {{ y }}
{% endfor %}

撰写回答