带有字典的 Django 分页,其中键是一个列表
Django pagination with dictionary where key is a list
我的 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]),)
更新:循环也可以。那你能展示一下你有什么结构吗?
我的 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]),)
更新:循环也可以。那你能展示一下你有什么结构吗?