封装好的自定义分页器
<代码>
类页面():
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