我试图根据当前正在另一个列表上迭代的索引显示不同列表中的值,但无法弄清楚如何访问各个项目。
{% for row in myarray.all %}
<tr>
<th>{{ my_other_array_where_I_cant_access_elements.forloop.counter }}</th>
<td>{{ row }}</td>
</tr>
{% endfor %}
正如您所看到的,我尝试使用forloop.counter
,但这并没有显示任何内容,只是创建了一个空的表头元素。
我的其他数组在视图中定义如下,如果我删除forloop.counter
,那么我能够看到整个数组打印到表头
my_other_array_where_I_cant_access_elements = ["X", "Y", "Z", "XX", "YY"]
如果我错过了任何必要的细节,请告诉我。
答案 0 :(得分:4)
听起来你想同时迭代两个列表,换句话说就是zip()
列表。
如果是这种情况,最好在视图中执行此操作并在上下文中传递:
headers = ["X", "Y", "Z", "XX", "YY"]
data = zip(headers, myarray.all())
return render(request, 'template.html', {'data': data})
然后,在模板中:
{% for header, row in data %}
<tr>
<th>{{ header }}</th>
<td>{{ row }}</td>
</tr>
{% endfor %}
答案 1 :(得分:0)
有一种可能的方法,我刚试过。它只适用于你只使用第二个数组作为单个for循环的一部分,并且不使用循环索引:
arr = ["1-0", "1-1"] # your first array
arr2 = ["2-0", "2-1"] # your second array
class wrap(object):
def __init__(self, ref):
self.ref = ref
self.idx = -1
def next(self):
self.idx += 1
return self.ref[self.idx]
return render_to_response('...', { "arr": arr, "wrap": wrap(arr2) })
模板是:
{% for row in arr %}
<h1>Row {{ row }} at {{ forloop.counter }} matches {{ wrap.matching }} </h1>
{% endfor %}