本文共 3328 字,大约阅读时间需要 11 分钟。
代码:
from django.utils.safestring import mark_safeclass Paginator(object): def __init__(self,current_page,total_item_count,base_url,per_page_count=10,show_pager_count=11): """ :param current_page: 当前页码 :param total_item_count: 数据库数据总条数 :param base_url: 分页前缀URL :param per_page_count: 每页显示数据条数 :param show_pager_count: 对多显示的页码 """ self.current_page = current_page self.total_item_count = total_item_count self.base_url = base_url self.per_page_count = per_page_count self.show_pager_count = show_pager_count #获取页码数及最后一页上显示的条目数 max_pager_num, b = divmod(total_item_count, per_page_count) if b: max_pager_num += 1 self.max_pager_num = max_pager_num @property def start(self): """ #每一页显示的第一条数据 :return: """ return (self.current_page-1)* self.per_page_count @property def end(self): """ #每一页显示的最后一条数据 :return: """ return self.current_page * self.per_page_count def page_html(self): """ :return: """ page_list = [] #如果当前页为第1页,则上一页按钮不可用 if self.current_page == 1: prev = '
使用方法:
从浏览器中取出当前的页码数
current_page=int(request.GET.get("page",1))
从数据库中取出的总的记录数
item_list=models.数据表.objects.all()total_item_count=item_list.count()
使用Paginator类实例化一个页码的对象:
page_obj=Paginator(current_page,total_item_count,"/index/")
需要注意的是: 实例化page_obj的时候,可以定义每页显示的记录个数per_page_count及显示在页面上的页码的个数show_page_count 每页显示的记录数per_page_count默认值为10, 页面显示的页码的个数show_page_count默认值为11
定义返回到客户端的记录列表
item_list=models.数据表.objects.all()[page_obj.start:page_obj.end]
最后使用render或者redirect返回给客户端
return render(request,"aaa.html",{"item_list":item_list,"page_html":page_obj.page_html()})
转载地址:http://jvfbm.baihongyu.com/