【问题标题】:Django how do you loop using range through two lists simultaneiouslyDjango你如何同时在两个列表中循环使用范围
【发布时间】:2021-12-23 11:42:08
【问题描述】:

我正在使用 Django,并希望遍历两个列表,以便它们并排: 我的意见文件:

def displayDict(request):
     data = ["a", "b", "c"]
     data2 = ["x", "y", "z"]
     return render(request, 'chattr.html',
     {'range': range(0,len(data)-1),'dictItems': data, "otherDict" : "other_bot", "dictItems_bot": data2, "otherDict2": "bot" , "duo" : (data, data2)})

我的模板:

{% for i in range %}
    <p>
        {{i}} <br>
        <b>{{otherDict}}:</b> {{dictItems.i}} <br>
        <b>{{otherDict2}}:</b> {{dictItems_bot.i}} <br>
        {% comment %} {{a|add:1}} {% endcomment %}
    </p>
{% endfor %} 

我想要一个如下所示的网页:
other_bot: 'a'
dictItems_bot: 'x'
other_bot : 'b'
dictItems_bot: 'y'
other_bot: 'c'
dictItems_bot: 'z'

目前除了机器人名称之外没有任何渲染:
other_bot:
dictItems_bot:
other_bot:
dictItems_bot:

我也可以使用元组来完成这个内部循环,Django Template: looping through two lists。但这会复杂得多,...

【问题讨论】:

    标签: python django


    【解决方案1】:

    试试这个...

    view.py

    def display_dict(request):
        data = ["a", "b", "c"]
        data2 = ["x", "y", "z"]
        context = {"data": zip(data, data2), "otherDict": "other_bot","otherDict2": "dictItems_bot"}
        return render(request, 'home.html', context)
    

    HTML

    {% for element in data %}
        <p><b>{{ otherDict }}:</b>{{ element.0 }}</p>
        <p><b>{{ otherDict2 }}:</b>{{ element.1 }}</p>
    {% endfor %}
    

    【讨论】:

    • 感谢@Nikunj 我希望能够遍历一个包含数百个条目的数组
    • 数百个元素没问题。 zip 返回一个迭代器对象。当您在 forloop 上下文中使用它时,它会为每次迭代生成一对。它的内存(和其他)开销很小。除非您强制执行,否则它不会生成新的配对列表,f.ex。 list(zip(data1, data2))
    【解决方案2】:

    对于这些类型的问题,我安装了 Django 调试工具栏,它可以让我看到上下文。我怀疑你的“范围”有问题,因为 {{i}} 没有被渲染(或者是吗?),所以你只是循环一次而不是三次,即根本不循环。

    【讨论】:

      猜你喜欢
      • 2020-07-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-12-07
      • 1970-01-01
      相关资源
      最近更新 更多