Skip to main content
 首页 » 编程设计

python之带有字典的 Django 分页,其中键是一个列表

2025年05月04日36lautakyan007

我的 views.py 文件中有一个字典,其中的值是列表。在我的模板中,我有以下 html:

{% for key, values in my_dict %} 
    <tr> 
        <td colspan="6" class="key">{{ key }}</td> 
    </tr> 
    {% for value in values %} 
        <tr> 
            <td colspan="6" class="value">{{ value }}</td> 
        </tr> 
    {% endfor %} 
{% endfor %} 

它打印出键的名称,后跟值中的列表项。但是,我希望能够对键进行分页,以便每页仅显示 10 个键及其值。

我在 views.py 中的 index 方法中使用以下代码进行分页:

paginator = Paginator(myDict, 10) 
page_num = requests.GET.get('page', 1) 
page = paginator.page(page_num) 

我将我的模板更新为 {% for key, values in page %} 当然我得到了一个 TypeError 因为它是一个可散列的类型。我只是想知道如何在不使用字典的情况下产生与以前相同的结果。

我找到了 this answer这建议使用元组而不是字典,但这似乎对我不起作用,我猜是因为我的值是列表。

请您参考如下方法:

我不确定它是否可以算作一个好的答案,但无论如何:我刚刚尝试用 tuple 复制你的问题和解决方案并且它有效。所以我认为问题可能出在您的代码中。我的测试代码:

>>> from django.core.paginator import Paginator 
>>> d = {'a': [1,2], 'b': [3,4]} 
>>> p = Paginator(d, 1) 
>>> p1 = p.page(1) 
Traceback (most recent call last): 
  File "<input>", line 1, in <module> 
TypeError: unhashable type 
>>> t = tuple(d.items()) 
>>> t 
(('a', [1, 2]), ('b', [3, 4])) 
>>> p = Paginator(t, 1) 
>>> p.page(1).object_list 
(('a', [1, 2]),) 
>>> p.page(2).object_list 
(('b', [3, 4]),) 

更新:循环也可以。那么你能展示一下你有哪些结构吗?