Django -自定义分页

  

封装好的自定义分页器

  
 <代码>
  类页面():
  
  def __init__(自我、page_num total_count base_url, params, per_page=10, max_page=11):
  
  ”“”
  page_num:当前页码数
  total_count:数据总数
  base_url:标签href的前缀
  请求参数:对象,是QueryDict类型
  per_page:每页显示多少条数据
  max_page:单一页面上最多显示几个页码
  ”“”
  
  自我。page_num=page_num
  自我。total_count=total_count
  自我。base_url=base_url
  自我。params=参数
  自我。per_page=per_page
  自我。max_page=max_page
  
  #总页码
  total_page, m=divmod(自我。total_count self.per_page)
  
  如果m:
  total_page +=1
  自我。total_page=total_page
  
  试一试:
  自我。page_num=int (self.page_num)
  #打印(“self.page_num==比;”,self.page_num) 1
  #如果输入的页码数大于最大的页码数,默认返回第一页
  如果自我。page_num祝辞self.total_page:
  自我。page_num=self.total_page
  elif自我。page_num & lt;=0:
  自我。page_num=1
  除了例外e:
  #当输入的页码不是数字时,返回第一页
  自我。page_num=1
  #如果当前页码数为0,那么数据开始位置也是0
  如果自我。page_num==0:
  自我。data_start=self.page_num
  #定义两个变量保存数据从哪取到哪
  其他:
  自我。data_start=(自我。page_num - 1) * 10
  
  自我。data_end=自我。page_num * 10
  
  #页面上总共展示多少页码
  #如果总页数小于设定的单页显示页码数
  如果自我。total_page & lt;self.max_page:
  自我。max_page=self.total_page
  #让选定页码取中,计算左右两边长度
  自我。half_max_page=自我。max_page//2
  
  #页面上展示的页码从哪开始
  自我。page_start=自我。page_num——self.half_max_page
  #页面上展示的页码从哪结束
  自我。page_end=自我。page_num + self.half_max_page
  #如果开始页数小于1
  如果自我。page_start & lt;=1:
  自我。page_start=1
  自我。page_end=self.max_page
  #如果结束页面大于最大页码数
  elif自我。page_end祝辞=self.total_page:
  自我。page_start=自我。total_page——自我。max_page + 1
  自我。page_end=self.total_page
  
  #拷贝一份请求对象,是个QueryDict形式,后面会用于获取及修改url
  进口复制
  自我。params=copy.deepcopy (self.params) #{“页面”:“12”,“title_startwith”:“py”、“id_gt”:“5”}
  
  @ property
  def开始(自我):
  返回self.data_start
  
  @ property
  def结束(自我):
  返回self.data_end
  
  def page_html(自我):
  
  #自己拼接分页的HTML代码
  html_str_list=[]
  打印(“html_str_list==比;”,html_str_list)
  #加上上一页标签
  #判断一下如果是第一页就没有上一页了
  如果自我。page_num & lt;=1:
  html_str_list.append (' & lt;李类=敖谩弊4? lt; a href=" https://www.yisu.com/zixun/"祝辞& lt;跨度aria-hidden=" true "祝辞? & lt;/span> & lt;/a> & lt;/li>”)
  #否则加上上一页
  其他:
  自我。params[“页面”]=自我。page_num - 1
  html_str_list.append (' & lt; li> & lt; a href=" https://www.yisu.com/zixun/{0}{1} ? "祝辞& lt;跨度aria-hidden=" true "祝辞? & lt;/span> & lt;/a> & lt;/li>“.format(自我。base_url self.params.urlencode ()))
  
  #加上首页
  自我。参数(“页面”)=1
  html_str_list.append (' & lt; li> & lt; a href=" https://www.yisu.com/zixun/{0} ?{1}”在首页& lt;/a> & lt;/li>“.format (self.base_url, self.params.urlencode ()))
  
  因为我在范围(自我。page_start,自我。page_end + 1):
  #把QueryDict中页面的修改为当前循环的页码
  自我。params=我“页面”
  #如果我等于当前页就加一个样式类
  如果我==self.page_num:
  tmp=' & lt;李类=盎钤尽弊4? lt; a href=" https://www.yisu.com/zixun/{0} ?页面={1}在{2}& lt;/a> & lt;/li>“.format (self.base_url, self.params.urlencode(),我)
  其他:
  tmp=' & lt; li> & lt; a href=" https://www.yisu.com/zixun/{0} ?{1}在{2}& lt;/a> & lt;/li>“.format (self.base_url, self.params.urlencode(),我)
  html_str_list.append (tmp)
  
  #加上尾页
  自我。params=self.total_page“页面”
  html_str_list.append (' & lt; li> & lt; a href=" https://www.yisu.com/zixun/{0}{1} ? "在尾页& lt;/a> & lt;/li>“.format (self.base_url, self.params.urlencode ()))
  
  #加上下一页标签
  #判断,如果是最后一页,就没有下一页
  如果自我。page_num祝辞=self.total_page:
  html_str_list.append (' & lt;李类=敖谩弊4? lt; a href=" https://www.yisu.com/zixun/"祝辞& lt;跨度aria-hidden=" true "祝辞? & lt;/span> & lt;/a> & lt;/li>”)
  其他:
  自我。params[“页面”]=自我。page_num + 1
  html_str_list.append (' & lt; li> & lt; a href=" https://www.yisu.com/zixun/{0}{1} ? "祝辞& lt;跨度aria-hidden=" true "祝辞? & lt;/span> & lt;/a> & lt;/li>“.format(自我。base_url self.params.urlencode ()))
  
  . join (html_str_list page_html=" ")
  
  返回page_html
  

Django -自定义分页