53 lines
1.3 KiB
Python
53 lines
1.3 KiB
Python
__author__ = 'RemiZOffAlex'
|
|
__copyright__ = '(c) RemiZOffAlex'
|
|
__email__ = 'remizoffalex@mail.ru'
|
|
|
|
from math import ceil
|
|
|
|
|
|
def getpage(query, page=1, page_size=10):
|
|
"""
|
|
Постраничный вывод
|
|
"""
|
|
if page_size:
|
|
query = query.limit(page_size)
|
|
if page:
|
|
query = query.offset((page-1)*page_size)
|
|
return query
|
|
|
|
|
|
class Pagination(object):
|
|
"""
|
|
Пагинация
|
|
"""
|
|
|
|
def __init__(self, page, per_page, total_count):
|
|
self.page = page
|
|
self.per_page = per_page
|
|
self.total_count = total_count
|
|
|
|
@property
|
|
def pages(self):
|
|
return int(ceil(self.total_count / float(self.per_page)))
|
|
|
|
@property
|
|
def has_prev(self):
|
|
return self.page > 1
|
|
|
|
@property
|
|
def has_next(self):
|
|
return self.page < self.pages
|
|
|
|
def iter_pages(self, left_edge=2, left_current=2,
|
|
right_current=5, right_edge=2):
|
|
last = 0
|
|
for num in range(1, self.pages + 1):
|
|
if num <= left_edge or \
|
|
(num > self.page - left_current - 1 and \
|
|
num < self.page + right_current) or \
|
|
num > self.pages - right_edge:
|
|
if last + 1 != num:
|
|
yield None
|
|
yield num
|
|
last = num
|