Django,通过拉链列表循环两次

时间:2017-08-02 21:45:41

标签: python django python-3.x iterator django-views

所以本质上我遇到的问题是我不能两次遍历压缩列表。我试过两次复制压缩列表。

list = zip(vmarray, uuidarray)

这是代码视图部分中包含vm的列表的实例化。

def malware(request):
     list, dictofvms = listofvms()
     listcopy = iter(list)
     list, listcopy = tee(listcopy)
     malwarelist = listofmalware()

return render(request, 'malware.html', {"malwarelist": malwarelist, "list": list, "listcopy": listcopy})

这是将请求传输到实际网页的代码部分。

现在,当我遍历恶意软件列表时,在代码中访问它时。它只允许我循环遍历列表一次,因为它是压缩/迭代器。如果有任何方法可以循环使用那些非常棒的物品。 (必须有一些简单的东西)[我可能只是愚蠢]

  {% for malware in malwarelist %}
{{ malware }}

      {% for vm, uuid in list %}
          {{ vm }}
   {% endfor %}



          {% for vm, uuid in listcopy %}
      {{ vm }}
   {% endfor %}






  {% endfor %}

2 个答案:

答案 0 :(得分:1)

好吧,您可以从迭代器创建一个列表,并仅将其传递给模板上下文:

def malware(request):
    lst, dictofvms = listofvms()
    lst = list(lst)
    malwarelist = listofmalware()
    return render(request, 'malware.html', {"malwarelist": malwarelist, 
                                            "lst": lst})

注意,我是如何避免使用list作为列表名称而不影响从迭代器对象创建列表所需的内置列表函数。

答案 1 :(得分:1)

使用zip的结果是zip object而不是列表。一旦你遍历zip object,它就会耗尽,你无法再次遍历它。

解决方法是将您的压缩对象转换为可以多次迭代的列表:

mylist = list(zip(vmarray, uuidarray))

相关问题