2017-08-02 37 views
0

因此,本质上我的问题是我无法迭代通过压缩列表两次。我试图复制压缩列表两次。Django,循环通过压缩列表两次

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 %} 

回答

1

好了,你可以创建迭代一个列表,并只传递给你的模板背景:

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

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

+0

感谢摩西你是个明星! – dipl0

0

使用zip的结果是一个zip object,而不是一个列表。一旦你遍历了一个zip object它已经耗尽,你不能再遍历它。

对此的解决方案是将您的压缩对象转换为可以遍历多次,像这样的列表:

mylist = list(zip(vmarray, uuidarray))