首页 > 代码库 > Django框架基础之分页

Django框架基础之分页

Django内置分页:

只适用于只有上一页和下一样的页面
技术分享
 1 def index(request): 2  3     current_page=request.GET.get(page) 4     user_list=models.UserInfo.objects.all() 5     paginator=Paginator(user_list,10) 6     # per_page: 每页显示条目数量 7     # count:    数据总个数 8     # num_pages:总页数 9     # page_range:总页数的索引范围,如: (1,10),(1,200)10     # page:     page对象11     try:12         posts=paginator.page(current_page)13         # has_next              是否有下一页14         # next_page_number      下一页页码15         # has_previous          是否有上一页16         # previous_page_number  上一页页码17         # object_list           分页之后的数据列表18         # number                当前页19         # paginator             paginator对象20     except PageNotAnInteger as e:21         posts=paginator.page(1)22     except EmptyPage as e:23         posts=paginator.page(1)24     return render(request,index.html,{posts:posts})
View Code
技术分享
 1 <!DOCTYPE html> 2 <html lang="en"> 3 <head> 4     <meta charset="UTF-8"> 5     <title>Title</title> 6 </head> 7 <body> 8 <h1>用户列表</h1> 9 <ul>10     {% for row in posts.object_list %}11          <li>{{ row.name }}</li>12     {% endfor %}13 </ul>14 <div>15     {% if posts.has_previous %}16         <a href=http://www.mamicode.com/"/index.html?page={{ posts.previous_page_number }}">上一页</a>17     {% endif %}18      {% if posts.has_next %}19          <a href=http://www.mamicode.com/"/index.html?page={{ posts.next_page_number }}">下一页</a>20      {% endif %}21 </div>22 </body>23 </html>
html

自定义分页:(其内部应用的就是mysql中的limit方法)

分页功能在每个网站都是必要的,对于分页来说,其实就是根据用户的输入计算出应该在数据库表中的起始位置。

1、设定每页显示数据条数

2、用户输入页码(第一页、第二页...)

3、设定显示多少页号

4、获取当前数据总条数

5、根据设定显示多少页号和数据总条数计算出,总页数

6、根据设定的每页显示条数和当前页码,计算出需要取数据表的起始位置

7、在数据表中根据起始位置取值,页面上输出数据

8、输出分页html,如:[上一页][1][2][3][4][5][下一页]

技术分享
 1 class PageInfo(object): 2     def __init__(self,current_page,all_count,per_page,base_url,show_page=11): 3         ‘‘‘ 4  5         :param current_page:  当前页 6         :param all_count: 全部数据行数 7         :param per_page: 每页显示的数据行数 8         :param base_url: 要跳转的url 9         :param show_page: 每页显示的页数10         ‘‘‘11         try:12 13             self.current_page = int(current_page)14         except Exception as e:15             self.current_page = 116 17         self.per_page=per_page18 19         a, b = divmod(all_count,per_page)20         if b:21             a = a + 122         self.all_pager = a23         self.show_page = show_page24         self.base_url=base_url25     def start(self):  #当前页的数据第一行的索引26         return (self.current_page-1)*self.per_page27 28     def end(self):    #当前页的数据最后一行的索引29         return self.current_page*self.per_page30 31     def pager(self):32         # v = "<a href=http://www.mamicode.com/‘/custom.html?page=1‘>12"33         # return v34         page_list=[]35 36         half =int((self.show_page-1)/2)37 38         #如果数据总页数《 要显示的页数39         if self.all_pager < self.show_page:40             begin=141             stop=self.all_pager42         else:43             #如果数据总页数大于要显示的页数  并且当前页数小于等于5(只显示1-11)44             if self.current_page <= half:45                 begin=146                 stop=self.show_page47             else:48                 # 如果数据总页数大于要显示的页数  并且当前页数+5 大于最大页数(只显示最大页-11,最大页)49                 if self.current_page + half > self.all_pager:50                     stop=self.all_pager +151                     begin=self.all_pager - self.show_page +152                 else:53                     # 正常情况下,显示当前页数的前后5页54                     begin = self.current_page - half55                     stop = self.current_page + half + 156 57         if self.current_page <= 1:58             prev = "<li><a  >上一页</a><li>"59         else:60             prev="<li><a  href=http://www.mamicode.com/‘%s?page=%s‘>上一页
  • "%(self.base_url,self.current_page-1,)61 page_list.append(prev)62 63 for i in range(begin,stop):64 if i == self.current_page:65 temp="<li class=‘active‘><a href=http://www.mamicode.com/‘%s?page=%s‘>%s
  • "%(self.base_url,i,i)66 else:67 temp = "<li><a href=http://www.mamicode.com/‘%s?page=%s‘>%s
  • " % (self.base_url,i, i)68 page_list.append(temp)69 70 if self.current_page >= self.all_pager:71 nex="<li><a href=http://www.mamicode.com/‘%s?page=%s‘>下一页
  • "%(self.base_url,self.current_page,)72 else:73 nex="<li><a href=http://www.mamicode.com/‘%s?page=%s‘>下一页
  • "%(self.base_url,self.current_page+1,)74 page_list.append(nex)75 76 return ‘‘.join(page_list)
  • 技术分享
    1 def custom(request):2 3     all_count=models.UserInfo.objects.all().count()4 5     page_info=PageInfo(request.GET.get(page),all_count,10,/custom.html)6     custom_list=models.UserInfo.objects.all()[page_info.start():page_info.end()]7     return render(request,custom.html,{custom_list:custom_list,page_info:page_info})
    应用

     

    Django框架基础之分页