Django笔记–python实现将分页功能封装成类
对于数据的表格形式呈现,庞大的数据量不可能全部放在一页中(除非数据很少)。所以基本上都需要用到分页功能。因此有必要将分页功能封装成一个类,方便使用。
pagination.py(将分页功能分装到Pagination类中)
from django.utils.safestring import mark_safe
from django.http import QueryDict
#分页器
class Pagination:
def __init__(self,request,all_count,query_params=QueryDict(),per_num=10,max_show=11): #接受一个request对象(request)与int类型的总数据量(all_count)
'''
base_url:路径
all_count: 总数据量
per_num: 每页的数据量(默认值为10)
max_show: 每页显示的页码数(默认值为11)
total_num:总页码数
current_page:当前页码
page_start:当前页面的第一个页码数
page_end:当前页面的最后一个页码数
query_params:url中的额外参数(这边指的是搜索条件)
'''
self.base_url = request.path_info #获取路径
self.max_show = max_show #获取每页显示页码数
self.per_num = per_num #获取每页的数据量
self.all_count = all_count #获取总数据量
self.query_params = query_params #url中额外的搜索参数
half_show = max_show // 2
self.total_num, more = divmod(all_count, per_num) #通过总数据量除每页数据量来获取总页码数与剩余数据量
try: #异常处理,获取当前页码
self.current_page = int(request.GET.get('page', 1))
if self.current_page <= 0:
self.current_page = 1
except Exception as e:
self.current_page = 1
if more: #如果剩余数据量不为0,则总页码数加1
self.total_num += 1
if self.total_num <= max_show: