"""
使用流程
分頁元件應用:
1. 在檢視函式中
queryset = models.issues.objects.filter(project_id=project_id)
page_object = pagination(
current_page=request.get.get('page'),
all_count=queryset.count(),
base_url=request.path_info,
query_params=request.get
)issues_object_list = queryset[page_object.start:page_object.end]
context =
return render(request, 'issues.html', context)
2. 前端
}"""
class pagination(object):
def __init__(self, current_page, all_count, base_url, query_params, per_page=30, 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:
self.current_page = 1
except exception as e:
self.current_page = 1
query_params = query_params.copy()
query_params._mutable = true
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:
"""if self.all_count == 0:
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:
' else:
self.query_params['page'] = self.current_page - 1
' % (self.base_url, self.query_params.urlencode())
for i in range(pager_start, pager_end + 1):
self.query_params['page'] = i
if self.current_page == i:
tpl = '%s
' % (
self.base_url, self.query_params.urlencode(), i,)
else:
tpl = '%s
' % (self.base_url, self.query_params.urlencode(), i,)
if self.current_page >= self.pager_count:
' else:
self.query_params['page'] = self.current_page + 1
' % (self.base_url, self.query_params.urlencode(),)
if self.all_count:
tpl = "共%s條資料,頁碼%s/%s頁
" % (
self.all_count, self.current_page, self.pager_count,)
page_str = "".join(page_list)
return page_str
Python 自定義分頁
django內建了分頁設定,但不夠靈活,需要我們自定義分頁。下面 考慮了利用bootstrap分頁元件來實現頁面美化,如果不想使用,可以不呼叫url format by bootstrap函式,即可實現普通分頁。具體的引數和 均有注釋 python3 project mysite2 pager.py...
python 自定義分頁元件
使用方法 自定義分頁元件的使用方法 pager obj pagination request.get.get page 1 len host list request.path info,request.get host list host list pager obj.start pager ob...
自定義分頁
分頁 public string madebuttonlink int pagecount,int curpage,string szurl pagecount得到頁數 curpage當前頁 szurl連線位址 public int getpagecount string sztable,int l...