python笔记(web后端,Djiango,分页实现)

  1. 函数代码

     def page(request):
         page_num = request.GET.get('page')
         page_num = int(page_num)
         date_start = (page_num-1)*10
         date_end = page_num * 10
    
         per_page = 10
         max_page = 11
         all_page = models.Name_list.objects.all().count()
         total_page,m = divmod(all_page,per_page)
         if max_page > total_page:
             max_page = total_page
         page_start = page_num - max_page//2
         page_end = page_num + max_page//2
         if page_start <= 1:
             page_start = 1
             page_end = max_page
         if page_end >= total_page:
             page_end = total_page
     
         all_show = models.Name_list.objects.all()[date_start:date_end]
         if m:
             total_page += 1
         page_list = []
         if page_num <= 1:
             prev_page = 1
             disable = 'disabled'
         else:
             disable = ''
             prev_page = page_num - 1
         page_list.append('<li class = {} ><a href="/page/?page={}" aria-label="Previous">'.format(disable,prev_page) +
                          '<span aria-hidden="true">&laquo;</span>' +
                          '</a></li>')
         page_list.append('<li><a href="/page/?page=1">首页</a></li>')
         for i in range(page_start,page_end+1):
             if i == page_num:
                 page_show = '<li class = "active"><a href="/page/?page={0}">{0}</a></li>'.format(i)
             else:
                 page_show = '<li><a href="/page/?page={0}">{0}</a></li>'.format(i)
             page_list.append(page_show)
         page_list.append('<li><a href="/page/?page={}">尾页</a></li>'.format(total_page))
         if page_num >= total_page:
             next_page = total_page
             disable = 'disabled'
         else:
             disable = ''
             next_page = page_num + 1
         page_list.append('<li class = {} ><a href="/page/?page={}" aria-label="Next">'.format(disable,next_page) +
                          '<span aria-hidden="true">&raquo;</span>' +
                          '</a></li>')
         page_html = ''.join(page_list)
     
     
         return render(request,'page_list.html',{'page_html':page_html,'all_show':all_show})
    
  2. 封装成类:

     class Pagination(object):
         def __init__(self, current_page, all_count, base_url,params, per_page_num=8, pager_count=11, ):
             """
             封装分页相关数据
             :param current_page: 当前页
             :param all_count:    数据库中的数据总条数
             :param per_page_num: 每页显示的数据条数
             :param base_url: 分页中显示的URL前缀
             :param pager_count:  最多显示的页码个数
             """
             try:
                 current_page = int(current_page)
             except Exception as e:
                 current_page = 1
     
             if current_page < 1:
                 current_page = 1
     
             self.current_page = current_page
     
             self.all_count = all_count
             self.per_page_num = per_page_num
     
             self.base_url = base_url
     
             # 总页码
             all_pager, tmp = divmod(all_count, per_page_num)
             if tmp:
                 all_pager += 1
             self.all_pager = all_pager
     
             self.pager_count = pager_count  # 最多显示页码数
             self.pager_count_half = int((pager_count - 1) / 2)
     
             import copy
             params = copy.deepcopy(params)
             params._mutable = True
             self.params = params  # self.params : {"page":77,"title":"python","nid":1}
     
     
         @property
         def start(self):
             return (self.current_page - 1) * self.per_page_num
     
     
         @property
         def end(self):
             return self.current_page * self.per_page_num
     
     
         def page_html(self):
             # 如果总页码 < 11个:
             if self.all_pager <= self.pager_count:
                 pager_start = 1
                 pager_end = self.all_pager + 1
             # 总页码  > 11
             else:
                 # 当前页如果<=页面上最多显示(11-1)/2个页码
                 if self.current_page <= self.pager_count_half:
                     pager_start = 1
                     pager_end = self.pager_count + 1
     
                 # 当前页大于5
                 else:
                     # 页码翻到最后
                     if (self.current_page + self.pager_count_half) > self.all_pager:
                         pager_start = self.all_pager - self.pager_count + 1
                         pager_end = self.all_pager + 1
     
                     else:
                         pager_start = self.current_page - self.pager_count_half
                         pager_end = self.current_page + self.pager_count_half + 1
     
             page_html_list = []
             self.params["page"] = 1
             first_page = '<li><a href="%s?%s">首页</a></li>' % (self.base_url, self.params.urlencode(),)
             page_html_list.append(first_page)
     
             if self.current_page <= 1:
                 prev_page = '<li class="disabled"><a href="#">上一页</a></li>'
             else:
                 self.params["page"] = self.current_page - 1
                 prev_page = '<li><a href="%s?%s">上一页</a></li>' % (self.base_url, self.params.urlencode(),)
     
             page_html_list.append(prev_page)
     
             for i in range(pager_start, pager_end):
                 #  self.params  : {"page":77,"title":"python","nid":1}
     
                 self.params["page"] = i  # {"page":72,"title":"python","nid":1}
                 if i == self.current_page:
                     temp = '<li class="active"><a href="%s?%s">%s</a></li>' % (self.base_url, self.params.urlencode(), i,)
                 else:
                     temp = '<li><a href="%s?%s">%s</a></li>' % (self.base_url, self.params.urlencode(), i,)
                 page_html_list.append(temp)
     
             if self.current_page >= self.all_pager:
                 next_page = '<li class="disabled"><a href="#">下一页</a></li>'
             else:
                 self.params["page"] = self.current_page + 1
                 next_page = '<li><a href="%s?%s">下一页</a></li>' % (self.base_url, self.params.urlencode(),)
             page_html_list.append(next_page)
     
             self.params["page"] = self.all_pager
             last_page = '<li><a href="%s?%s">尾页</a></li>' % (self.base_url, self.params.urlencode(),)
             page_html_list.append(last_page)
     
             return ''.join(page_html_list)
    

    HTML代码

     <!DOCTYPE html>
     <html lang="zh-CN">
     <head>
         <meta charset="UTF-8">
         <title>page</title>
         {% load static %}
         <link href="{% static 'bootstrap-3.3.7-dist/css/bootstrap.min.css' %}" rel="stylesheet">
     </head>
     <body>
     <div class="container">
         <table class="table table-bordered">
             <thead>
     
             <tr>
                 <th>序号</th>
                 <th>name</th>
                 <th>addr</th>
             </tr>
     
             </thead>
         <tbody>
         {% for i in all_show %}
         <tr>
             <td>{{ forloop.counter }}</td>
             <td>{{ i.name }}</td>
             <td>{{ i.ords }}</td>
         </tr>
         {% endfor %}
         </tbody>
         </table>
         <nav aria-label="Page navigation">
             <ul class="pagination">
                 {{ page_html|safe }}   # 若是类pagination.page_html
     
             </ul>
         </nav>
     </div>
     
     </body>
     </html>
    
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值