我有一个包含对象列表和两个按钮的页面:显示更多和显示所有。这些对象由AJAX加载,发送到ItemsListView
页码:
class ItemsListView(ListView):
paginate_by = 2
在初始化页面时,JS变量current_page
设置为1
,JS向ItemsListView
视图发送AJAX请求,为第一页获取2个对象并呈现它们。
当用户点击显示更多按钮时,current_page
值会增加,并且JS会请求下一页的对象。
现在我要实现 show all 按钮。例如,
如果我们有以下对象列表:[1, 2, 3, 4, 5, 6, 7, 8, 9]
,则会在页面上加载对象1
和2
。用户点击显示更多后,它将呈现对象3
和4
。用户点击 show all 后,它将呈现对象5
,6
,7
,8
和9
。< / p>
我在视图中动态更改了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
并且它有效,但我想知道是否有更优雅的方法来解决这个问题。
答案 0 :(得分:0)
根本不优雅:D但更明显......
def get_queryset(self):
show_all = ...
page = ...
qs = super(ItemsListView, self).get_queryset()
if show_all:
return qs[int(page)*self.paginate_by:]
else:
return qs