from django import template from django.conf import settings from django.core.paginator import Page register = template.Library() @register.assignment_tag def get_paginated_list( page=None, adjacent_pages=settings.PAGINATOR_ADJACENT_PAGES): """ Generate a paginator list with ellipsis. """ # Sanity check if type(page) is not Page or page.paginator.count == 0: return None paginator = page.paginator num_pages = paginator.num_pages if num_pages == 1: return (1,) start_page = max(page.number - adjacent_pages, 1) end_page = min(page.number + adjacent_pages, num_pages) print(start_page, end_page) page_number_list = [] page_number_list.extend(( x for x in range(start_page, end_page + 1))) if 2 not in page_number_list: page_number_list.insert(0, 2) page_number_list.insert(0, 1) if num_pages - 1 not in page_number_list: page_number_list.extend((num_pages - 1, num_pages)) return page_number_list