【问题标题】:is there a way to loop over two lists simultaneously in django?有没有办法在 django 中同时循环两个列表?
【发布时间】:2020-07-23 17:38:04
【问题描述】:

我有两个长度相同的列表对象以及我想要渲染的互补数据有没有一种方法可以同时渲染两者,即。

{% for i,j in table, total %} 
 {{ i }} 
 {{ j }}
{% endfor %} 

或类似的东西?

【问题讨论】:

    标签: python django django-templates django-views


    【解决方案1】:

    如果两个列表的长度相同,您可以在视图中返回 zipped_data = zip(table, total) 作为模板上下文,这会生成一个 2 值元组列表。

    例子:

    >>> lst1 = ['a', 'b', 'c']
    >>> lst2 = [1, 2, 3]
    >>> zip(lst1, lst2)
    [('a', 1), ('b', 2), ('c', 3)]
    

    在你的模板中,你可以写:

    {% for i, j in zipped_data %}
        {{ i }}, {{ j }}
    {% endfor %}
    

    另外,请查看 Django 文档中有关 for 模板标签 here 的信息。它提到了你使用它的所有可能性,包括很好的例子。

    【讨论】:

    • 这个问题看起来很简单,或者我很笨。但感谢所有回答的人!
    • @mike 你不傻。我们所有人都在不久前学习 Python 和 Django 的时候。而且 Django 的文档没有提到 Python 的 zip 函数,所以这个问题肯定很有用。我很高兴能帮助你。 :)
    【解决方案2】:

    对于此问题的任何最近访问者,forloop.parentloop 可以模拟两个列表的压缩:

    {% for a in list_a %}{% for b in list_b %}
        {% if forloop.counter == forloop.parentloop.counter %}
            {{a}} {{b}}
        {% endif %}
    {% endfor %}{% endfor %}
    

    【讨论】:

      【解决方案3】:

      使用 python 的 zip 函数将 2 个列表压缩在一起。

      在你看来:

      zip(table, list)
      

      在您的模板中,您可以像简单列表一样对其进行迭代,并使用 .0 和 .1 属性分别访问表和列表中的数据。

      【讨论】:

        【解决方案4】:

        如果您正在查看的只是变量 ij,那么这应该可以工作 -

        return render_to_response('results.html',
            {'data': zip(table, list)})
        
        {% for i, j in data %}
            <tr>
                <td> {{ i }}: </td> <td> {{ j }} </td>
            </tr>
        {% endfor %}
        

        (感谢所有回答此问题的人)

        【讨论】:

        • 从列表转换为字典并在其上调用 sorted 可能会改变数据的排序顺序。
        • 好点,我已经更新了我的答案以简单地迭代 zip。
        【解决方案5】:

        不要使用字典(不保证任何排序),而是在两个列表上使用 python zip 函数并将其传递给模板。

        【讨论】:

          【解决方案6】:

          您必须在视图中执行此操作 - 使用内置的 zip 函数创建一个元组列表,然后在模板中对其进行迭代。

          模板逻辑很简单,任何稍微复杂的事情都应该在视图中完成。

          【讨论】:

            猜你喜欢
            • 2022-01-22
            • 2015-05-23
            • 2023-01-09
            • 1970-01-01
            • 1970-01-01
            • 2020-03-10
            • 1970-01-01
            • 2021-12-16
            相关资源
            最近更新 更多