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分页与自定义分页的主要内容,如果未能解决你的问题,请参考以下文章