【问题标题】:Django, Looping Through Zipped Lists TwiceDjango,循环通过压缩列表两次
【发布时间】:2018-01-10 07:25:50
【问题描述】:

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

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

【问题讨论】:

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


    【解决方案1】:

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

    解决方案是将您的压缩对象转换为可以多次迭代的列表,如下所示:

    mylist = list(zip(vmarray, uuidarray))

    【讨论】:

    • 遇到这种情况,这是最简单的解决方案
    【解决方案2】:

    好吧,您可以从迭代器创建一个列表,然后只将它传递给您的模板上下文:

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

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

    【讨论】:

    • 感谢摩西,你是明星!
    猜你喜欢
    • 2020-07-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-02-05
    • 2016-10-09
    • 2020-11-22
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多