【问题标题】:Django ValueError: Need 3 values to unpack in for loop; got 2. How to unpack zipped data in template?Django ValueError:需要 3 个值才能在 for 循环中解压;得到 2. 如何解压模板中的压缩数据?
【发布时间】:2021-02-23 23:43:24
【问题描述】:

我试图在 Django 模板中的表格中显示一些压缩数据,但一直收到此错误:ValueError: Need 3 values to unpack in for loop;得到2。 它包含一个字典和一个列表。 我已经在空闲状态下测试了相同的代码,并且打印效果很好。我究竟做错了什么?提前致谢!


这是我为 Django 所做的:

views.py

labels = [1, 4, 5]
mydic = {'a': ['a','b','c'], 'b':['e','f','g'], 'c':['l','m','n']}
dic_items = mydic.items()

zipped = zip(dic_items, labels)

base.html

    <table>
        {% for (k, v), l in zipped %}
        <tr>
            <th>Label{{ l }}</th>
            <td>{{ v.0 }}</td>
            <td>{{ v.1 }}</td>
            <td>{{ v.2 }}</td>
        </tr> 
        {% endfor %}
    </table>

在空闲时打印出相同的代码:

a
['a', 'b', 'c']
1
b
['e', 'f', 'g']
4
c
['l', 'm', 'n']
5

我也试过了:

{% for k, v, l in zipped %};
{% for k, v in dic_items %}{% for l in labels %};
{% for k,v in dic_items, for l in labels %}, etc.

它们都不起作用。

我怀疑这可能与标签不包含与 v 相同数量的项目有关?但它与字典中的键数量相同。 所以我的目标是为每一行添加一个标签,理想情况下是这样的:

标签 1 |一个 |乙 | c

标签 4 |电子| f | g

标签 5 | l |米 | n

有没有办法做到这一点?

【问题讨论】:

    标签: python django html-table


    【解决方案1】:

    括号可能是问题所在。您可以使用下标来访问键和值:

    <table>
        {% for kv, l in zipped %}
        <tr>
            <th>Label{{ l }}</th>
            <td>{{ kv.1.0 }}</td>
            <td>{{ kv.1.1 }}</td>
            <td>{{ kv.1.2 }}</td>
        </tr> 
        {% endfor %}
    </table>

    话虽如此,在早期版本的 Python 中,字典以“不可预测”的顺序提供数据。所以在这种情况下,zip(…) 与字典的项目没有多大意义,因为每次的顺序都可能不同。

    【讨论】:

    • 非常感谢!这正是我想要的。我对编程还是很陌生,并且经常对语法和索引感到困惑。 kv.1.0是否意味着访问v?那么第一个数字只有 0 或 1 吗?另外,如果字典方法没有多大意义,那么改用什么更好?再次感谢。
    • @octacube: kv.1 将等价于kv[1],因此由于kv 是一个键值元组,因此我们在这种情况下使用该值。
    猜你喜欢
    • 2019-01-09
    • 2021-03-23
    • 2019-01-09
    • 1970-01-01
    • 1970-01-01
    • 2020-07-09
    • 2022-12-01
    • 2011-05-29
    相关资源
    最近更新 更多