Example #1
0
    def paginate(self,
                 queryset,
                 page_param=None,
                 page_size=None,
                 raise_when_overflow=False):
        """
        Updates context with a member called 'page'. This member contains the queryset paginated.

        :param QuerySet queryset: objects queryset to paginate.
        :param str page_param: request get param used for page number.
        :param str page_size: number of items per page.
        :param bool raise_when_overflow: if True a HTTP 404 - Not Found error will be raised.
        :return: context updated with pagination info
        :rtype: dict
        """
        if page_size is None:
            page_size = self.page_size

        if page_param is None:
            page_param = self.page_param

        paginator = Paginator(queryset, page_size)
        page_num = self.request.GET.get(page_param) or 1

        try:
            page = paginator.page(page_num)
        except PageNotAnInteger:
            # If page is not an integer, deliver first page.
            page = paginator.page(1)
        except EmptyPage:
            # If page is out of range (e.g. 9999), deliver last page of results.
            page = paginator.page(paginator.num_pages)
            if raise_when_overflow:
                raise exc.NotFound("page not found")

        paginator.after_current = PAGINATOR_NUMBERS_AFTER_CURRENT
        paginator.before_current = PAGINATOR_NUMBERS_BEFORE_CURRENT
        paginator.at_begin = PAGINATOR_NUMBERS_AT_BEGIN
        paginator.at_end = PAGINATOR_NUMBERS_AT_END
        return page
    def paginate(self, queryset, page_param=None, page_size=None, raise_when_overflow=False):
        """
        Updates context with a member called 'page'. This member contains the queryset paginated.

        :param QuerySet queryset: objects queryset to paginate.
        :param str page_param: request get param used for page number.
        :param str page_size: number of items per page.
        :param bool raise_when_overflow: if True a HTTP 404 - Not Found error will be raised.
        :return: context updated with pagination info
        :rtype: dict
        """
        if page_size is None:
            page_size = self.page_size

        if page_param is None:
            page_param = self.page_param

        paginator = Paginator(queryset, page_size)
        page_num = self.request.GET.get(page_param) or 1

        try:
            page = paginator.page(page_num)
        except PageNotAnInteger:
            # If page is not an integer, deliver first page.
            page = paginator.page(1)
        except EmptyPage:
            # If page is out of range (e.g. 9999), deliver last page of results.
            page = paginator.page(paginator.num_pages)
            if raise_when_overflow:
                raise exc.NotFound("page not found")

        paginator.after_current = PAGINATOR_NUMBERS_AFTER_CURRENT
        paginator.before_current = PAGINATOR_NUMBERS_BEFORE_CURRENT
        paginator.at_begin = PAGINATOR_NUMBERS_AT_BEGIN
        paginator.at_end = PAGINATOR_NUMBERS_AT_END
        return page