Python 自定義分頁

2022-07-26 04:06:08 字數 3565 閱讀 3963

"""

使用流程

分頁元件應用:

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...