首次提交
This commit is contained in:
@@ -0,0 +1,125 @@
|
||||
"""
|
||||
基础分页程序,处理分页计算,后续应当扩展其功能。
|
||||
"""
|
||||
|
||||
|
||||
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
|
||||
Reference in New Issue
Block a user