Python ListView django中的分页
我试图用html模板对我的表中的数据进行分页,但它不起作用。我使用列表视图中的默认分页系统。此外,我还有一个表单,用户可以在其中传递每页值的项目。这是我的views.py代码:Python ListView django中的分页,python,django,Python,Django,我试图用html模板对我的表中的数据进行分页,但它不起作用。我使用列表视图中的默认分页系统。此外,我还有一个表单,用户可以在其中传递每页值的项目。这是我的views.py代码: class CategoryListView(ListView): model = Category def get_paginate_by(self, queryset, **kwargs): itemsForm = ItemsPerPageForm(self.request.GET)
class CategoryListView(ListView):
model = Category
def get_paginate_by(self, queryset, **kwargs):
itemsForm = ItemsPerPageForm(self.request.GET)
if itemsForm.is_valid():
itemsPerPage = itemsForm.cleaned_data.get('items_per_page')
print(itemsPerPage)
if itemsPerPage is None:
return 4
else:
if itemsPerPage > 0 and itemsPerPage <= Category.objects.get_queryset().count():
return itemsPerPage
else:
return 4
def get_context_data(self, *, object_list=Expense.objects.get_queryset(), **kwargs):
categoriesList = Category.objects.get_queryset()
queryset = object_list
return super().get_context_data(
noOfExpenses=zip(categoriesList, noOfExpenses(queryset)),
itemsForm = ItemsPerPageForm
)
class CategoryListView(ListView):
型号=类别
def获取分页方式(self、queryset、**kwargs):
itemsForm=ItemsPerPageForm(self.request.GET)
如果itemsForm.is_有效():
itemsPerPage=itemsForm.cleaned\u data.get('items\u per\u page'))
打印(项目页面)
如果itemsPerPage为无:
返回4
其他:
如果itemsPerPage>0且itemsPerPageclass MyView(ListView):
template_name=“page.html”
分页方式=4
def获取分页方式(自身、查询集):
itemsForm=ItemsPerPageForm(self.request.GET)
如果itemsForm.is_有效():
itemsPerPage=itemsForm.cleaned\u data.get('items\u per\u page'))
itemsPerPage=int(itemsPerPage)
打印(项目页面)
如果itemsPerPage>0,itemsPerPage好,那么我找到了答案。Django中的通用视图使用object\u list
作为查询集。然后使用它渲染queryset中的数据。我需要将noOfExpenses
更改为object\u list
,并将其转换为list
,仅此而已。也许您必须将itemsPerPage转换为intshow,向我们展示您的listview代码的其余部分对,它成功了,现在显示了第1页,共1页。但是,尽管如此,在每页传递了大量项目后,它仍然显示4个项目,即使页面数量发生变化。您可以将此变量保存到会话并在模板中查看它,我更改了代码(未测试),希望它能正常工作。好吧,项目数量仍然没有变化。我不知道,可能是我的模板有问题,可能是我忘了在for循环中包含一些内容。这就像循环的for
总是迭代四次,即使每页的项目数发生了变化。也许有一个函数可以打破循环或每页只迭代项
次?请分享你的观点好吗?
</table>
<tbody>
{% for category, expenses in noOfExpenses %}
<tr>
<td>{{ page_obj.start_index|add:forloop.counter0}}.</td>
<td>{{ category.name|default:"-" }}</td>
<td>{{ expenses }}</td>
</tr>
{% empty %}
<tr>
<td colspan="6">no items</td>
</tr>
{% endfor %}
</tbody>
</table>
<hr/>
{% include "_pagination.html" %}
{{page_obj}}
<form method="get" action="">
{{itemsForm.as_p}}
<button type="submit">submit</button>
</form>
<div class="pagination">
<span class="pagination__nav">
{% if page_obj.has_previous %}
<a href="?page=1">« first</a>
<a href="?page={{ page_obj.previous_page_number }}">previous</a>
{% endif %}
<span class="current">
Page {{ page_obj.number }} of {{ page_obj.paginator.num_pages }}.
</span>
{% if page_obj.has_next %}
<a href="?page={{ page_obj.next_page_number }}">next</a>
<a href="?page={{ page_obj.paginator.num_pages }}">last »</a>
{% endif %}
<br/> Total items: {{page_obj.paginator.count}}
</span>
</div>
class MyView(ListView):
template_name = "page.html"
paginate_by = 4
def get_paginate_by(self, queryset):
itemsForm = ItemsPerPageForm(self.request.GET)
if itemsForm.is_valid():
itemsPerPage = itemsForm.cleaned_data.get('items_per_page')
itemsPerPage = int(itemsPerPage)
print(itemsPerPage)
if itemsPerPage > 0 and itemsPerPage <= Category.objects.get_queryset().count():
self.request.session['paginate_by'] = itemsPerPage
else:
self.request.session['paginate_by'] = self.paginate_by
return self.request.GET.get('paginate_by', self.paginate_by)