Django分页:“显示全部”实现

时间:2015-07-22 10:48:55

标签: ajax django pagination django-pagination

我有一个包含对象列表和两个按钮的页面:显示更多显示所有。这些对象由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],则会在页面上加载对象12。用户点击显示更多后,它将呈现对象34。用户点击 show all 后,它将呈现对象56789。< / 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

并且它有效,但我想知道是否有更优雅的方法来解决这个问题。

1 个答案:

答案 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