Django之自定義分頁元件

2021-10-06 00:04:59 字數 2889 閱讀 5294

from django.utils.safestring import mark_safe  #mark_safe:安全字串

class

mypage

:def

__init__

(self, page_num, page_num_count, req_path, per_page_num, page_num_show)

: self.page_num = page_num

self.page_num_count = page_num_count

self.req_path = req_path

self.per_page_num = per_page_num # 每頁顯示多少條資料

self.page_num_show = page_num_show # 顯示的頁碼數

# 如果有異常就預設當前頁

try:

self.page_num =

int(self.page_num)

except exception:

self.page_num =

1# 計算有多少頁 如果商不為0頁數就加一 總的頁碼數

a, b =

divmod

(self.page_num_count, self.per_page_num)

if b:

self.page_num_count = a +

1else

: self.page_num_count = a

# 如果小於1就讓他去當前頁,大於總頁數就讓他去最後一頁

if self.page_num <=0:

self.page_num =

1elif self.page_num >= self.page_num_count:

self.page_num = self.page_num_count

# 每頁展示的頁碼數

half_show = self.page_num_show //

2# 2

if self.page_num - half_show <=0:

start_page_num =

1 end_page_num = self.page_num_show +

1elif self.page_num + half_show >= self.page_num_count:

start_page_num = self.page_num_count - self.page_num_show +

1 end_page_num = self.page_num_count +

1else

: start_page_num = self.page_num - half_show # 3

end_page_num = self.page_num + half_show +

1# 7

self.start_page_num = start_page_num

self.end_page_num = end_page_num

# 每頁顯示多少條資料 開始

@property

defstart_data_num

(self)

:return

(self.page_num -1)

* self.per_page_num

# 每頁顯示多少條資料 結束

@property

defend_data_num

(self)

:return self.page_num * self.per_page_num

# 前端頁碼

defpage_html

(self)

: page_num_range =

range

(self.start_page_num, self.end_page_num)

page_html =

''if self.page_num <=1:

page_pre_html = f'''

'''else

: page_next_html = f'''»尾頁

'''page_html += page_next_html

return mark_safe(page_html)

def

index

(request)

:# 當前頁

page_num = request.get.get(

'page'

)# 獲取路徑

req_path = request.path_info

# 計算有多少條資料

all(

).count(

)#settings中封裝的頁碼數和每頁顯示多少條資料

per_page_num = settings.per_page_num # 每頁顯示多少條資料

page_num_show = settings.page_num_show # 顯示的頁碼數

#封裝的分頁元件

page_obj = mypage(page_num,page_num_count,req_path,per_page_num,page_num_show)

page_html = page_obj.page_html(

)# 獲取所有的資料

all(

)[page_obj.start_data_num:page_obj.end_data_num]

return render(request,

'crm/index.html'

,)

直接拿去用就行…

django 自定義分頁元件

分頁元件應用 在檢視函式中 queryset models.issues.objects.filter project id project id page object pagination current page request.get.get page all count queryset....

django 自定義分頁

django框架雖然帶有自己的分頁功能,但是樣式不好看,為了做更好看的分頁,需要自定義乙個分頁工具,話不多說擼起袖子就開幹。1.首先先建乙個python檔案叫pager.py 如下 class pagination object page url 翻頁url路由 object list 資料來源列表...

django自定義分頁

django框架雖然帶有自己的分頁功能,但是樣式不好看,為了做更好看的分頁,需要自定義乙個分頁工具,話不多說擼起袖子就開幹。1.首先先建乙個python檔案叫pager.py 如下 class pagination object page url 翻頁url路由 object list 資料來源列表...