Django+paginator实现分页+省略号代替多余页码+页面跳转(分页最全功能all_in)
个人拙见,可能还有更好的办法,望指正!
先上图看一下效果:

js插件引入:
- jQuery
- bootstrap
借图分析功能点(注意参数代表的意义):
- 页数 num_pages <= 12 时:页码不加省略号,所有页码全部显示.
形如:< 1 2 3 4 5 6 7 8 9 10 11 12 > - 页数 num_pages > 12 时:页码加省略号显示.
形如:< 1 2 3 4 5 6 7 8 9 10 … 20 >
将情况理清楚之后,接着分析加省略号之后的逻辑情况:
注意:此时分析的是 num_pages > 12
- 当request请求页码数 page.number >= 1 and page.number <= 10:
显示样式:< 1 2 3 4 5 6 7 8 9 10 … 20 > - 当request请求页码数 page.number == num_pages,也就是最后一页:
显示样式:< 1 2 3 4 5 6 7 8 9 10 … 20 >
(同上) - 当request请求页码数 page.number == 11:
显示样式:< 1 2 3 4 5 6 7 8 9 10 11 … 20 > - 当request请求页码数 page.number == lastButOne,也就是倒数第二页:
显示样式:< 1 2 3 4 5 6 7 8 9 10 … 19 20 > - 以上格式都不是,也就是 page.number > 11 and page.number < lastButOne
显示样式:< 1 2 3 4 5 6 7 8 9 10 … 15 … 20 >
分析好逻辑思想之后再来看代码就不会那么迷糊了:
这里需要解释一下,因为使用的是Django框架,我这里将结合前后端来进行上述思想的逻辑判断,当然也可以使用JS来进行,也可以使用后端来判断,减少前端运行压力。
HTML分页代码
views后端代码
# 一页十条数据paginator = Paginator(Data, 10)# 获取页码,默认第一页page_num = request.GET.get('page', '1')try:Page = paginator.page(page_num)except(PageNotAnInteger, EmptyPage, InvalidPage):Page = paginator.page('1')#这里是后端逻辑判断if Page.paginator.num_pages >= 13:ifEllipsis = 1range1 = range(1, 13)range2 = range(1, 15)range3 = range(1, 14)lastButOne = Page.paginator.num_pages - 1else:ifEllipsis = 0
这里需要解释一下range1、range2、range3:
因为Django框架在模板标签{%for%}中是不能直接使用range(1,12)的,所以通过后端传进去之后就可以使用range进行for遍历了。。。。(有一种钻牛角尖的丫子)
接下来介绍如何实现跳转:
上述HTML代码最后已经有跳转的button了,接下来就是解释如何实现链接跳转。
我使用了一个js方法来控制向后端发送GET请求,链接末尾加上pageNum,发送给后端,具体方法如下:
到此,上述功能全部描述完毕。
如果有错误,麻烦指正,如果有更好的方法,请评论或者私信,感激不尽!^_^
本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!
