# -*- coding: utf-8 -*-import math
from mongoengine.queryset import QuerySet
__all__ = ("Pagination")
classPagination(object):"""
This is class for paginate
"""def__init__(self, iterable, page, per_page):if page < 1:
raise Exception
self.iterable = iterable
self.page = page
self.per_page = per_page
if isinstance(iterable, QuerySet):
self.total = iterable.count()
else:
self.total = len(iterable)
start_index = (page - 1) * per_page
end_index = page * per_page
self.items = iterable[start_index:end_index]
if isinstance(self.items, QuerySet):
self.items = self.items.select_related()
ifnot self.items and page != 1:
raise Exception
@propertydefpages(self):"""The total number of pages"""return int(math.ceil(self.total / float(self.per_page)))
defprev(self, error_out=False):"""Returns a :class:`Pagination` object for the previous page."""assert self.iterable isnotNone, ('an object is required ''for this method to work')
iterable = self.iterable
if isinstance(iterable, QuerySet):
iterable._skip = None
iterable._limit = Nonereturn self.__class__(iterable, self.page - 1, self.per_page)
@propertydefprev_num(self):"""Number of the previous page."""return self.page - 1@propertydefhas_prev(self):"""True if a previous page exists"""return self.page > 1defnext(self, error_out=False):"""Returns a :class:`Pagination` object for the next page."""assert self.iterable isnotNone, ('an object is required ''for this method to work')
iterable = self.iterable
if isinstance(iterable, QuerySet):
iterable._skip = None
iterable._limit = Nonereturn self.__class__(iterable, self.page + 1, self.per_page)
@propertydefhas_next(self):"""True if a next page exists."""return self.page < self.pages
@propertydefnext_num(self):"""Number of the next page"""return self.page + 1defiter_pages(self, left_edge=2, left_current=2,
right_current=5, right_edge=2):
last = 0for num in range(1, self.pages + 1):
if (
num <= left_edge or
num > self.pages - right_edge or
(num >= self.page - left_current and
num <= self.page + right_current)
):
if last + 1 != num:
yieldNoneyield num
last = num
if last != self.pages:
yieldNone
mongoengine分页# -*- coding: utf-8 -*-import mathfrom mongoengine.queryset import QuerySet__all__ = ("Pagination")class Pagination(object): """ This is class for paginate """ ...