2017-08-02 39 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))