一.分页器的函数封装
# 分页计算最小页和最大页 def page_list_return(total, current=1): ''' 分页,返回本次分页的最小页数和最大页数列表 :param total: :param current: :return: ''' min_page = current - 2 if current - 4 > 0 else 1 max_page = current + 4 if current + 4 < total else total return list(range(min_page, max_page + 1)) # 分页器 def pages(post_objects, request): ''' 分页公共函数,返回分页的对象元组 :param post_objects: :param request: :return: ''' # 分页器 paginator = Paginator(post_objects, 10) try: # 本页页码 current_page = int(request.GET.get('page', '1')) except ValueError: current_page = 1 # 所有页码 page_range = page_list_return(len(paginator.page_range), current_page) try: # 本页对象 page_objects = paginator.page(current_page) except (EmptyPage, InvalidPage): page_objects = paginator.page(paginator.num_pages) if current_page >= 5: show_first = 1 else: show_first = 0 if current_page <= (len(paginator.page_range) - 3): show_end = 1 else: show_end = 0 # 所有对象,分页器,本页对象,所有页码,本业页码,是否显示第一页,是否显示最后一页 return post_objects, paginator, page_objects, page_range, current_page, show_first, show_end