1. 程式人生 > >stark組件分頁開發

stark組件分頁開發

back b- star params else 上一頁 append 條件 開發

"""
分頁組件
"""


class Pagination(object):
def __init__(self, current_page, all_count, base_url, query_params, per_page=20, pager_page_count=11):
"""
分頁初始化
:param current_page: 當前頁碼
:param per_page: 每頁顯示數據條數
:param all_count: 數據庫中總條數
:param base_url: 基礎URL
:param query_params: QueryDict對象,內部含所有當前URL的原條件
:param pager_page_count: 頁面上最多顯示的頁碼數量
"""
self.base_url = base_url
try:
self.current_page = int(current_page)
if self.current_page <= 0:
raise Exception()
except Exception as e:
self.current_page = 1
self.query_params = query_params
self.per_page = per_page
self.all_count = all_count
self.pager_page_count = pager_page_count
pager_count, b = divmod(all_count, per_page)
if b != 0:
pager_count += 1
self.pager_count = pager_count

half_pager_page_count = int(pager_page_count / 2)
self.half_pager_page_count = half_pager_page_count

@property
def start(self):
"""
數據獲取值起始索引
:return:
"""
return (self.current_page - 1) * self.per_page

@property
def end(self):
"""
數據獲取值結束索引
:return:
"""
return self.current_page * self.per_page

def page_html(self):
"""
生成HTML頁碼
:return:
"""
# 如果數據總頁碼pager_count<11 pager_page_count
if self.pager_count < self.pager_page_count:
pager_start = 1
pager_end = self.pager_count
else:
# 數據頁碼已經超過11
# 判斷: 如果當前頁 <= 5 half_pager_page_count
if self.current_page <= self.half_pager_page_count:
pager_start = 1
pager_end = self.pager_page_count
else:
# 如果: 當前頁+5 > 總頁碼
if (self.current_page + self.half_pager_page_count) > self.pager_count:
pager_end = self.pager_count
pager_start = self.pager_count - self.pager_page_count + 1
else:
pager_start = self.current_page - self.half_pager_page_count
pager_end = self.current_page + self.half_pager_page_count

page_list = []

if self.current_page <= 1:
prev = ‘<li><a href="#">上一頁</a></li>‘
else:
self.query_params[‘page‘] = self.current_page - 1
prev = ‘<li><a href="%s?%s">上一頁</a></li>‘ % (self.base_url, self.query_params.urlencode())
page_list.append(prev)
for i in range(pager_start, pager_end + 1):
self.query_params[‘page‘] = i
if self.current_page == i:
tpl = ‘<li class="active"><a href="%s?%s">%s</a></li>‘ % (
self.base_url, self.query_params.urlencode(), i,)
else:
tpl = ‘<li><a href="%s?%s">%s</a></li>‘ % (self.base_url, self.query_params.urlencode(), i,)
page_list.append(tpl)

if self.current_page >= self.pager_count:
nex = ‘<li><a href="#">下一頁</a></li>‘
else:
self.query_params[‘page‘] = self.current_page + 1
nex = ‘<li><a href="%s?%s">下一頁</a></li>‘ % (self.base_url, self.query_params.urlencode(),)
page_list.append(nex)
page_str = "".join(page_list)
return page_str

stark組件分頁開發