4729698049
git-subtree-dir: paste-framework git-subtree-split: 34e8684c4bc3cebbe177509f42ab4ef5b5425a7a
126 lines
2.9 KiB
Python
126 lines
2.9 KiB
Python
"""
|
|
基础分页程序,处理分页计算,后续应当扩展其功能。
|
|
"""
|
|
|
|
|
|
class Pagination:
|
|
"""
|
|
分页程序。
|
|
"""
|
|
|
|
def __init__(self, row_count: int):
|
|
"""
|
|
初始化分页。
|
|
|
|
:param row_count: 总记录行数
|
|
"""
|
|
self._offset = 0
|
|
"""
|
|
偏移量。
|
|
"""
|
|
|
|
self._pages = -1
|
|
"""
|
|
总页数。
|
|
"""
|
|
|
|
self._page_number = 1
|
|
"""
|
|
当前页码。
|
|
"""
|
|
|
|
self.row_count = row_count
|
|
"""
|
|
数据行数。
|
|
"""
|
|
|
|
self.page_size = 20
|
|
"""
|
|
每页显示的数据量。默认 20 行每页。
|
|
"""
|
|
|
|
@property
|
|
def page_count(self):
|
|
"""
|
|
取得页数。该属性必须在调用 :meth:`.pages` 方法后调用,例如::
|
|
|
|
>>> self.pages()
|
|
>>> self.page_count
|
|
|
|
:return: 页数
|
|
"""
|
|
return self._pages
|
|
|
|
@property
|
|
def page_number(self):
|
|
"""
|
|
取得当前页码。该属性必须在调用 :meth:`.number` 方法后调用, 例如::
|
|
|
|
>>> self.number(3)
|
|
>>> self.page_number
|
|
|
|
:return: 页码
|
|
"""
|
|
return self._page_number
|
|
|
|
@property
|
|
def offset_size(self):
|
|
"""
|
|
取得偏移量。
|
|
"""
|
|
return self._offset
|
|
|
|
def pages(self, page_size: int = 20):
|
|
"""
|
|
计算页数。
|
|
|
|
:param page_size: 每页行数,必须处于 [1, 1000] 区间中。若不在此区间,则强制转换到此区间。默认每页 20 条。
|
|
:return: 计算取得的页数。
|
|
"""
|
|
page_size = 1 if page_size < 1 else page_size
|
|
page_size = 1000 if page_size > 1000 else page_size
|
|
self.page_size = page_size
|
|
|
|
if self.row_count == 0:
|
|
self._pages = 1
|
|
else:
|
|
_v1 = self.row_count / page_size
|
|
_v2 = self.row_count // page_size
|
|
self._pages = _v2 if _v1 == _v2 else _v2 + 1
|
|
|
|
return self._pages
|
|
|
|
def number(self, page_number: int):
|
|
"""
|
|
检查页码范围。
|
|
|
|
:param page_number: 页码
|
|
:return: 正确页码
|
|
"""
|
|
_pages = self.pages(self.page_size)
|
|
self._page_number = 1 if page_number < 1 else page_number
|
|
self._page_number = _pages if self._page_number > _pages else self._page_number
|
|
return self._page_number
|
|
|
|
def offset(self, page_number: int):
|
|
"""
|
|
偏移量。
|
|
|
|
:param page_number: 页码
|
|
:return: 偏移量
|
|
"""
|
|
self._offset = self.page_size * (page_number - 1)
|
|
return self._offset
|
|
|
|
def paging(self, page_number: int = 1, page_size: int = 20):
|
|
"""
|
|
分页计算,支持链式调用。
|
|
|
|
:params page_number 页码
|
|
:params page_size 每页显示的数量
|
|
:return self
|
|
"""
|
|
self.pages(page_size=page_size)
|
|
self.offset(self.number(page_number))
|
|
return self
|