Source code for djem.pagination

from django.conf import settings
from django.core.paginator import EmptyPage, PageNotAnInteger, Paginator


[docs]def get_page(number, object_list, per_page=None, **kwargs): """ Return the specified page, as a Django Page instance, from a Paginator constructed from the given object list and other keyword arguments. Handle InvalidPage exceptions and return logical valid pages instead. The ``per_page`` argument defaults to DJEM_DEFAULT_PAGE_LENGTH, if set. Otherwise, it is a required argument. """ if per_page is None: try: per_page = settings.DJEM_DEFAULT_PAGE_LENGTH except AttributeError: raise TypeError('The "per_page" argument is required unless DJEM_DEFAULT_PAGE_LENGTH is set.') paginator = Paginator(object_list, per_page, **kwargs) try: return paginator.page(number) except PageNotAnInteger: number = 1 except EmptyPage: if number < 1: # Page number too low, return first page number = 1 elif paginator.num_pages: # Page number too high, return last page number = paginator.num_pages else: # Paginator has no pages, still try for the first page. Will return # an empty page unless allow_empty_first_page is False. number = 1 return paginator.page(number)