我有一个包含对象列表和两个按钮的页面:show more和show all. 对象由 AJAX 加载,发送到ItemsListView
一个页码:
class ItemsListView(ListView):
paginate_by = 2
在初始化页面时,JS 变量current_page
设置为1
,并且 JS 发送 AJAX 请求ItemsListView
查看,获取第一页的 2 个对象并呈现它们。
当用户单击show more按钮时,current_page
值会增加,并且 JS 会请求下一页的对象。
现在我想实现show all按钮。例如,
如果我们有以下对象列表:[1, 2, 3, 4, 5, 6, 7, 8, 9]
,在页面上加载对象1
并将2
被渲染。用户点击后show more,它会渲染对象3
和4
. 用户单击 后,show all它将呈现对象5
、6
、7
和。8
9
在我看来,我动态地改变paginate_orphans
了:
class ItemsListView(ListView):
paginate_by = 2
paginate_orphans = 0
def get_paginate_orphans(self):
show_all = json.loads(self.request.GET.get('show_all', 'false'))
page_kwarg = self.page_kwarg
page = self.kwargs.get(page_kwarg) or self.request.GET.get(page_kwarg) or 1
if show_all:
return self.get_queryset().count() - (int(page) - 1) * 2
return self.paginate_orphans
它奏效了,但我想知道是否有更优雅的方法来解决这个问题。