from django.core.paginator import Paginator, PageNotAnInteger, EmptyPage, InvalidPage
def page_results(contacts, number, per_page):
"""
分页函数
:param contacts:列表 或 models list
:param number:当前页
:param per_page:每页多少条数量
:return:
"""
number = number if number else 1
per_page = per_page if per_page else 10
per_page = per_page if type(per_page) is int else int(per_page)
paginator = Paginator(contacts, per_page)
kwargs = {
'per_page': 0,
'has_previous': 0, # 0 False ,1 True
'has_next': 0, # 0 False ,1 True
'previous_page_number': 0,
'next_page_number': 0,
'number': 0,
'num_pages': 0,
'count': 0,
'has_other_pages': 0,
'start_index': 0,
'end_index': 0,
}
try:
number = number if type(number) is int else int(number)
contacts = paginator.page(number)
# TODO: 开始捕获异常
except PageNotAnInteger:
contacts = paginator.page(1)
except InvalidPage:
# 如果请求的页数不存在, 重定向页面
contacts = paginator.page(1)
except EmptyPage:
# 如果请求的页数不在合法的页数范围内,返回结果的最后一页。
contacts = paginator.page(paginator.num_pages)
per_page = contacts.paginator.per_page # 每页多少条数量
number = contacts.number # 当前页
num_pages = contacts.paginator.num_pages # 总页数
count = contacts.paginator.count # 总条数
kwargs['per_page'] = per_page
kwargs['number'] = number
kwargs['num_pages'] = num_pages
kwargs['count'] = count
if number > 1:
kwargs['has_previous'] = 1
kwargs['previous_page_number'] = number - 1
if number < num_pages:
kwargs['has_next'] = 1
kwargs['next_page_number'] = number + 1
if number > 1 or number < num_pages:
kwargs['has_other_pages'] = 1
if count == 0:
kwargs['start_index'] = 0
else:
kwargs['start_index'] = (per_page * (number - 1)) + 1
if number == num_pages:
kwargs['end_index'] = count
else:
kwargs['end_index'] = number * per_page
return contacts, kwargs
Python:Django3x分页分个明白
最新推荐文章于 2022-08-15 16:06:11 发布