• 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>
    

      

  • 相关阅读:
    ASP.NET 2.0
    PHP
    SQL 查询逻辑处理顺序
    LEETCODE
    网络学习课程资源
    概率论
    集合论
    图论
    《组合数学》
    离散数学
  • 原文地址:https://www.cnblogs.com/liuqingyang/p/9925401.html
Copyright © 2020-2023  润新知