django自定义分页器

page.py

 def __init__(self,current_page_num,all_count,per_age_num=2,pager_count=11)
'''current_page:当前页;all_count:数据库中的数据总条数;per_page_num:每页显示的数据条数;pager_count:最多显示的页码个数
        try:
            current_page_num=int(current_page_num)
        except Exception as e:
            current_page_num = 1
        if current_page_num<1:
            current_page_num =1
        self.current_page_num = current_page_num
        self.all_count = all_count
        self.per_page_num = per_page_num
#总页码
        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)
    @property
    def start(self):
        return(self.current_page_num -1)*self.per_page_num
    @property
    def end(self):
         return(self.current_page_num)*self.per_page_num
    def page_html(self):
        #如果总页码<11:
        if self.all_page<=self.pager_count:
            pager_start = 1
            pager_end = self.all_pager +1
        #总页码>11:
        else:
            #当前页如果<=页面上最多显示11/2个页码
            if  self.current_page_num <= self.pager_count_half:
                pager_start =1
                pager_end = self.pager_count+1
            #当前页>5:
            else:
                #页码翻到最后
                if (self.current_page_num +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_pager_num -self.pager_count_half
                     pager_end = self.current_page_num + self.pager_count_half+1
  page_html_list =[]
  first_page = '<li><a href="?page=%s">首页</a></li>'%(1)
  page_html_list.append(first_page)
  if self.current_page_num <=1:
    prev_page = '<li class="disabled"><a href="#">上一页</a></li>'
  else:
    prev_page = '<li><a href="?page=%s">上一页</a></li>'%(self.current_page_num-1)
  page_html_list.append(prev_page)
  for i in range(pager_start,paper_end):
    if i == self.current_page_num:
      temp = '<li class="active"><a href="?page=%s">%s</a></li>'%(i,i)
    else:
      temp='<li><a href="?page=%s">%s</a></li>'%(i,i)
    page_html_list.append(temp)
  if self.current_page_num >= self.all_pager:
    next_page = '<li class="disabled"><a href="#">下一页</a></li>'
  else:
    next_page = '<li><a href="?page=%s">下一页</a></li>' % (self.current_page_num + 1,)
  page_html_list.append(next_page)
  last_page = '<li><a href="?page=%s">尾页</a></li>' % (self.all_pager,)
  page_html_list.append(last_page)
  return ''.join(page_html_list)

 views.py

from myapp.page import Pagination
current_page_num = request.GET.get("page")
book_list = Book.objects.all()
pagination=Pagination(current_page_num,book_list.count())
book_list=book_list[pagination.start:pagination.end]
return render(request,"index.html",locals())

 index.html

<body>
<ul>
    {% for book in book_list %}
    <li>{{ book.title }}----{{ book.price }}</li>
    {% endfor %}
</ul>
<nav aria-lable="Page navigation">
    <ul class="pagination">
        {{ pagination.page_html|safe }}
</nav>
</body>

  

posted @ 2018-11-07 20:19  不喜欢酸甜的刘青阳  阅读(135)  评论(0编辑  收藏  举报