在views.py中,我有变量

mylist = zip(set1,set2,set3)

在模板中我这样做

{% for val1, val2, val3 in mylist%}
{% endfor %}

它工作正常.但是,如果我复制条件,它就会失败.这正常吗?假设我有以下内容:

# this is my page
some text
{% for val1, val2, val3 in mylist %}
  {{forloop.counter}}
{% endfor %}
more text
{% for val1, val2, val3 in mylist %}
  {{forloop.counter}}
{% endfor %}
more text
# final text of page

第一个循环将起作用,第二个循环将为空.好像我只能用一次mylist.对于简单的列表,我没有遇到过这个问题.一种解决方案是创建两个相同的上下文变量,以拥有两个for循环,但这似乎很奇怪……

推荐答案

Please note that…

您问题的第一行代码很奇怪,我会将其替换为:

myzip = zip(mylistA,mylistB,mytuple)

的确,set()是可迭代的,但它没有任何顺序.因此,在本例中使用zip()会导致意外的行为.


The answer

zip()返回迭代器.It can only be consumed once.

在Python中也可以try 这样做:

myzip = zip([1,2,3], ("a","b","c"))

for i,j in myzip:
    print(i, j)

for i,j in myzip:
    print(i, j)

你会得到同样的行为.它将返回以下once:

1 a
2 b
3 c

一个解决方法是在任何for循环之前调用list()函数:

mylist = list(myzip)

Django相关问答推荐

把Django测试和testcafe结合起来?

Django相关对象引用模板

获取PyCharm中继承方法的未解析属性引用

Django:作为模型中的列表元素的字段

Django REST框架中如何从另一个视图调用API视图?

查询 django 模型以找到当月最好的公司销售

如何将 ManyToManyField 与另一个 ManyToManyField 进行比较

JSP模板继承

可插拔应用程序的Django默认设置约定?

Django:如何从模板调用视图函数?

ImportError:升级到 Django 4.0 后无法从 'django.conf.urls' 导入名称 'url'

Django模板转义

Django:如何编写查询以使用多列进行排序,通过模板显示

在 docker 容器中创建 django 超级用户而不输入密码

如何在 Django 中测试自定义模板标签?

Django REST Framework - 序列化可选字段

Django:如何将数据保存到 ManyToManyField?

如何在该元素中的所有应用程序之间共享元素范围的模板标签

如何在 django 中捕获UNIQUE constraint failed404

Django:按位置排序,忽略 NULL