text: 
  
  class Pagination(object):
      # request.GET
      def __init__(self, current_page, all_count, base_url, query_params, per_page=10, pager_page_count=11):
          """
          分页初始化
          :param current_page: 当前页码
          :param per_page: 每页显示数据条数
          :param all_count: 数据库中总条数
          :param base_url: 基础URL
          :param query_params: QueryDict对象，内部含所有当前URL的原条件
          :param pager_page_count: 页面上最多显示的页码数量
          """
          self.base_url = base_url
          try:
              self.current_page = int(current_page)
              if self.current_page <= 0:
                  self.current_page = 1
          except Exception as e:
              self.current_page = 1
          query_params = query_params.copy()  # request.GET.copy()
          query_params._mutable = True
  
          self.query_params = query_params
          self.per_page = per_page
          self.all_count = all_count
          self.pager_page_count = pager_page_count
  
          # 30  10 -- 3
          # 35  10 -- 4
          pager_count, b = divmod(all_count, per_page)
          if b != 0:
              pager_count += 1
          self.pager_count = pager_count
          # pager_page_count 显示多少个页码
  
          half_pager_page_count = int(pager_page_count / 2)
          self.half_pager_page_count = half_pager_page_count
  
      @property
      def start(self):
          """
          数据获取值起始索引
          :return:
          """
          return (self.current_page - 1) * self.per_page
  
      @property
      def end(self):
          """
          数据获取值结束索引
          :return:
          """
          return self.current_page * self.per_page
  
      def page_html(self):
          """
          生成HTML页码
          :return:
          """
          if self.all_count == 0:
              return ""
  
          # 如果数据总页码pager_count<11 pager_page_count
  
          # 3 -- 11
          if self.pager_count < self.pager_page_count:
              pager_start = 1
              pager_end = self.pager_count
          else:
              # 数据页码已经超过11
              # 判断： 如果当前页 <= 5 half_pager_page_count
              # current_page = 7  page=7  11/2   12
              if self.current_page <= self.half_pager_page_count:
                  pager_start = 1
                  pager_end = self.pager_page_count
                  # 1 -- 11
              else:
                  # 如果： 当前页+5 > 总页码
                  if (self.current_page + self.half_pager_page_count) > self.pager_count:
                      # 110 -- 11
                      pager_end = self.pager_count
                      pager_start = self.pager_count - self.pager_page_count + 1
                  else:
                      pager_start = self.current_page - self.half_pager_page_count
                      pager_end = self.current_page + self.half_pager_page_count
  
          page_list = []
  
          if self.current_page <= 1:
              prev = '<li><a href="#">上一页</a></li>'
          else:
              self.query_params['page'] = self.current_page - 1
              prev = '<li><a href="%s?%s">上一页</a></li>' % (self.base_url, self.query_params.urlencode())
          page_list.append(prev)
          for i in range(pager_start, pager_end + 1):
              self.query_params['page'] = i
              if self.current_page == i:
                  tpl = '<li class="active"><a href="%s?%s">%s</a></li>' % (
                      self.base_url, self.query_params.urlencode(), i,)
              else:
                  tpl = '<li><a href="%s?%s">%s</a></li>' % (self.base_url, self.query_params.urlencode(), i,)
              page_list.append(tpl)
  
          if self.current_page >= self.pager_count:
              nex = '<li><a href="#">下一页</a></li>'
          else:
              self.query_params['page'] = self.current_page + 1
              nex = '<li><a href="%s?%s">下一页</a></li>' % (self.base_url, self.query_params.urlencode(),)
          page_list.append(nex)
  
          if self.all_count:
              tpl = "<li class='disabled'><a>共%s条数据，页码%s/%s页</a></li>" % (
              self.all_count, self.current_page, self.pager_count,)
              page_list.append(tpl)
          page_str = "".join(page_list)
          return page_str
  
      # <li><a href='base_url?page=5&a=2&b=3'>5</a></li>
  
  