Django Paginatior分页,页码过多,动态返回页码,页码正常显示

问题:

当返回数据较多,如设置每页展示10条,数据接近200条,返回页码范围1~20,前端每个页码都显示的话,就会出现页码超出当前页面,被遮挡的页码无法操作和显示不美观;

代码优化:

在使用paginator转化为Page对象后,获取到num_pages:总的页码数,配合当前页码,进行判断

实现效果:

页面结合上下页和返回的pageRange,显示10个页码,并设置上下页,进行操作

 

代码实现:

动态返回页码逻辑:

如果当前页码-5,小于1,返回的页码范围: (1,11)

如果当前页码-5>1,且当前页码+5小于总页码,范围(当前页码-5,当前页码+5)

如果当前页码-5>1,且当前页码+5大于总页码,范围(当前页码-5,总的页码数+1)

views.py层代码

    def get(self, request):
        p_index = int(request.GET.get('page', 1))
        # 过滤状态等于0的数据
        list = TestBatch.objects.filter(~Q(status=0)).all()

        page_count = 10
        start = (p_index - 1) * page_count

        paginator = Paginator(list, page_count)

        currentPage = paginator.get_page(p_index).number

        data_p = paginator.page(p_index)

        # 页码超出12页时,前端显示页码会被遮挡,对页码进行处理,超出12时,返回指定规则的页码,上下页结合进行翻页
        if paginator.num_pages > 12:
            if currentPage - 5 < 1:
                pageRange = range(1, 11)
            elif currentPage + 5 > paginator.num_pages:
                pageRange = range(currentPage - 5, paginator.num_pages+1)
            else:
                pageRange = range(currentPage - 5, currentPage + 5)
        else:
            pageRange = paginator.page_range
        return render(request, 'page/batchList.html', {"batchs": data_p, "start": start, "currentPage": currentPage,"pageRange": pageRange})

配置html页面

posted on 2023-02-17 16:49  刚刚好1  阅读(164)  评论(0编辑  收藏  举报

导航