python/Djangof分页与自定义分页

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了python/Djangof分页与自定义分页相关的知识,希望对你有一定的参考价值。

python/Djangof分页与自定义分页

Django分页

 1    ##============================================分页=======================================================
 2     # current_pagc = request.GET.get(‘page‘)
 3     # from django.core.paginator import Paginator,Page
 4     # # result = models.UserInfo.objects.all().count()
 5     # result = models.UserInfo.objects.all()
 6     # paginator=Paginator(result,10)
 7     # try:
 8     #     posts=paginator.page(current_pagc)
 9     # except Exception as c:
10     #     posts = paginator.page(1)
11     # return render(request,‘geting.html‘,{‘posts‘:posts})
 1     ##============================================django自定义分页不能对页数进行限定============================
 2 
 3 # class PageInfo(object):
 4 #
 5 #     def __init__(self,current_page,per_page,all_count,show_page=11):
 6 #         try:
 7 #             self.current_page = int(current_page)
 8 #         except Exception as e:
 9 #             self.current_page=1
10 #         self.per_page=per_page
11 #         self.all_count=all_count
12 #         a,b =divmod(all_count,per_page)
13 #         if b:
14 #            a = a+1
15 #         self.all_pager = a
16 #         self.show_page=show_page
17 #
18 #     def start(self):
19 #         return (self.current_page -1)* self.per_page
20 #
21 #     def end(self):
22 #         return self.current_page * self.per_page
23 #
24 #     def pager(self):
25 #         # v=‘<a href="/custom.html?page=1">1</a>‘
26 #         # return v
27 #         page_list=[]
28 #         half=(self.show_page-1)/2
29 #         begin=self.current_page - half
30 #         stop=self.current_page +half +1
31 #         for i in range(int(begin),int(stop)):
32 #             if self.current_page == i:
33 #                 temp="<a style=‘display:inline-block;padding:5px;margin:5px;background-color:red‘ href=‘/custom.html?page=%s‘>%s</a>"%(i,i,)
34 #             else:
35 #                 temp = "<a style=‘display:inline-block;padding:5px;margin:5px;‘ href=‘/custom.html?page=%s‘>%s</a>" % (
36 #                 i, i,)
37 #             page_list.append(temp)
38 #
39 #         return ‘‘.join(page_list)
40 # def custom(request):
41 #     #表示用户当前想要访问的页码
42 #     all_count = models.UserInfo.objects.all().count()
43 #     #每页显示的个数
44 #     page_info=PageInfo(request.GET.get(‘page‘),10,all_count)
45 #     user_list = models.UserInfo.objects.all()[page_info.start():page_info.end()]
46 #     return render(request,‘custom.html‘,{‘user_list‘:user_list,‘page_info‘:page_info})

自定义Django分页

  1 from django.core.paginator import Paginator,Page
  2 class PageInfo(object):
  3 
  4     def __init__(self,current_page,per_page,all_count,show_page=11):
  5         ##类的变量参数
  6         try:
  7         #捕捉异常
  8             self.current_page = int(current_page)
  9         #如果能正常转换成整型就赋值给self.current_page
 10         except Exception as e:
 11         #不能正常转换成整型就赋值成数字1
 12             self.current_page=1
 13         #设置多少条数据分为一个一页
 14         self.per_page=per_page
 15         #获取数据库中所有的数据能分为多少页
 16         self.all_count=all_count
 17         #进行分页计算(数据库总数/多少天数据进行分页)能除开等到结果就像是(12,0)把12赋值给a,把0赋值给b
 18         a,b =divmod(all_count,per_page)
 19         #如果b为真
 20         if b:
 21         #a 等于a+1
 22            a = a+1
 23         #求出总共要分的页数赋值给self.all_pager
 24         self.all_pager = a
 25         #把传入的show_page值赋值给self.show_page
 26         self.show_page=show_page
 27 
 28     def start(self):
 29         #定义函数  设定起始位
 30         return (self.current_page -1)* self.per_page
 31         #返回当前页数减1 乘每页多少数据
 32     def end(self):
 33         # 定义函数  设定停止位
 34         return self.current_page * self.per_page
 35         # 返回当前页数减乘每页多少数据
 36     def pager(self):
 37         #定义函数
 38         # v=‘<a href="/custom.html?page=1">1</a>‘
 39         # return v
 40         page_list=[]
 41         #创建列表
 42         half=(self.show_page-1)/2
 43         #获取页码的中间值
 44         if self.all_pager < self.show_page:
 45         #如果数据库的数小于设定的页码数
 46             begin=1
 47         #起始位设定为1
 48             stop=self.all_pager+1
 49         #停止为设定为数据库的数加上1(因为切片是顾头不顾尾)
 50         else:
 51         #否则
 52             if self.current_page <= half:
 53         #如果当前页码小于等于页码中间值
 54                 begin=1
 55         #起始位设定为1
 56                 stop=self.show_page+1
 57         #停止位设定为页码数加1(因为切片是顾头不顾尾)
 58             else:
 59         #否则
 60                 if self.current_page + half > self.all_pager:
 61         #如果当前页码加上中间的页码大于数据库的总页码数
 62                     begin=self.all_pager-10
 63         #起始值设定为数据库总数减10
 64                     stop=self.all_pager+1
 65         #停止值设定为数据库总数加1(因为切片是顾头不顾尾)
 66                 else:
 67         #否则
 68                     begin=self.current_page-half
 69         #起始位设定为当前页码减中间页码
 70                     stop=self.current_page+half+1
 71         #停止位设定为当前页码加中间页码加1(因为切片是顾头不顾尾)
 72         if self.current_page==self.all_pager:
 73             up = "<li><a href=‘#‘>下一页</a></li>"
 74         else:
 75             up = "<li><a href=‘/custom.html?page=%s‘>下一页</a></li>" % (self.current_page+1)
 76         page_list.append(up)
 77         for i in range(int(begin),int(stop)):
 78         #进行循环范围是(起始位,停止位)
 79             if self.current_page == i:
 80         #如果当前页码等于循环的i时
 81                 temp="<li class=‘active‘><a  href=‘/custom.html?page=%s‘>%s</a></li>"%(i,i,)
 82         #自定义一个a标签设置简单样式 并添加背景颜色作为当前页码标识
 83             else:
 84         #否则
 85                 temp = "<li><a href=‘/custom.html?page=%s‘>%s</a></li>" % (
 86                 i, i,)
 87         #自定义一个a标签设置简单样式
 88             page_list.append(temp)
 89         #把每循环的a标签都添加到page_list列表中
 90         if self.current_page==1:
 91             nex = "<li><a href=‘#‘>上一页</a></li>"
 92         else:
 93             nex = "<li><a href=‘/custom.html?page=%s‘>上一页</a></li>" % (self.current_page-1)
 94         page_list.append(nex)
 95         return ‘‘.join(page_list)
 96         #把列摆中的内容进行拼接(因为返回的是字符串)
 97 # def custom(request):
 98 #     #从数据库中获取所有数据
 99 #     all_count = models.UserInfo.objects.all().count()
100 #     #实例化一个对象并进行传值
101 #     page_info=PageInfo(request.GET.get(‘page‘),10,all_count)
102 #     #从数据库中获取数据设置起始和结束位置
103 #     user_list = models.UserInfo.objects.all()[page_info.start():page_info.end()]
104 #     #返回到HTML标签中并传入参数
105 #     return render(request,‘custom.html‘,{‘user_list‘:user_list,‘page_info‘:page_info})
106 
107 ##==================================================总结=================================================================
108 ‘‘‘
109 1.获取到数据中最大的页码数 
110 2.设定一页显示多少数据
111 3.在用数据库总数除以要显示的内容数量(如果余数不等于零需要多添加一页)
112 4.设定一页中显示多少页码按钮
113 5.获取一页页码中中间的页码数
114 6.判断数据库的页码是不是小于设定一页中显示页码按钮的数(如果小于就重写停止值,不小于就往下判断)
115 7.判断当前页码数小于等于设定页码的中间值(重写起始值为1)
116 8.当前页码值不小于等于页码的中间值(重写起始值为中间值-5,结束值+6,因为切片是顾头不顾尾)
117 9.判断当前页码加上中间页码数是不是大于数据库总数(大于重写起始值为数据库总数-10,结束值为数据库总数+1,因为切片是顾头不顾尾)
118 10.通过python向HTML页面中传一个函数名,在HTML中函数名.方法执行(不能加括号执行)
119 11.|safe  表明是安全参数可以正常渲染
120 12.判断当前页码数是不是等于1(如果等于1不执行上一步按钮)
121 13.判断当前页码数是不是等于数据库总数(如果等于不执行下一步按钮)
122 ‘‘‘

 

以上是关于python/Djangof分页与自定义分页的主要内容,如果未能解决你的问题,请参考以下文章

自定义分页与保存搜索条件

使用Spring Data JPA进行数据分页与排序

物理分页与逻辑分页

Django Ajax与自定义分页器

bootstrap分页与翻页

ES实战ES分页与去重