【问题标题】:Django pagination: "show all" implementationDjango 分页:“显示全部”实现
【发布时间】:2015-07-22 20:47:41
【问题描述】:

我有一个包含对象列表和两个按钮的页面:show moreshow all。对象由 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 将被渲染。在用户点击show more后,它会渲染对象34。用户点击show all后,会渲染对象56789

在我看来我是动态变化的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

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

【问题讨论】:

    标签: ajax django pagination django-pagination


    【解决方案1】:

    一点也不优雅 :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
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-09-01
      • 2021-10-09
      • 2011-07-22
      • 1970-01-01
      • 2011-08-08
      • 1970-01-01
      • 2021-12-29
      • 1970-01-01
      相关资源
      最近更新 更多