def paging_handle(items, page=1, length=10): """ :param items: list :param page: current page number :param length: number per page :return: paginator.page(paginator.num_pages) """ paginator = Paginator(items, length) # Show 10 notifications per page try: page = int(page) current_page = paginator.page(page) last_page_num = paginator.page_range[-1] # last page # get page number list eg. [1,-1,curent_page-4,...,curent_page,...curent_page+4,-1,last_page] step = 4 begin = max(1, page - step) end = min(last_page_num, page + step) ran = range(begin, end + 1, 1) if ran[0] > 2: ran.insert(0, -1) if ran[0] != 1: ran.insert(0, 1) if ran[-1] < last_page_num - 1: ran.append(-1) if ran[-1] != last_page_num: ran.append(last_page_num) paginator.page_range_custom = ran except PageNotAnInteger: # If page is not an integer, deliver first page. current_page = paginator.page(1) except EmptyPage: # If page is out of range (e.g. 9999), deliver last page of results. # current_page = paginator.page(paginator.num_pages) current_page = None return current_page
def result(self): paginator = Paginator( self.all_items, self.items_per_page) # Show 10 notifications per page try: paginator.page_range_custom = self.page_range_custom( paginator.page_range[-1]) items = paginator.page(self.page_num) except PageNotAnInteger: # If page is not an integer, deliver first page. items = paginator.page(1) except EmptyPage: # If page is out of range (e.g. 9999), deliver last page of results. items = paginator.page(paginator.num_pages) return items