Django內建分頁

2022-08-11 04:12:18 字數 4433 閱讀 2239

1、匯入django類生成物件之後的方法

#

內建分頁需要匯入django中的類

from django.core.paginator import

paginator

paginator = paginator(user_list,10)

#第乙個引數是我們查出來的所有的物件, 第二個引數表示的是每頁顯示的行數

#生成乙個paginator物件 paginator可以點出如下的方法

#per_page: 每頁顯示條目的數量(多少行)

#count: 總資料的個數

#num_pages: 總頁數

#page_range: 總頁數的索引範圍,eg: (1,10) 表示第1頁到第10頁

#page: page物件

users = paginator.page(cur_page) #

需要把當前頁數傳進去

#生成page物件,page物件有如下的方法##

###object_list 分頁之後的資料列表queryset 列表中套物件

#number 當前頁

#paginator paginator物件

2、後端**

def

test(request):

#首先我們需要從前端獲取到需要指定的當前頁數

cur_page = request.get.get("

cur_page")

#轉成int型別

cur_page =int(cur_page)

#查出所有的物件

user_list =models.userinfo.objects.all()

#內建分頁需要匯入django中的類

from django.core.paginator import

paginator

paginator = paginator(user_list,10)

users = paginator.page(cur_page) #

需要把當前頁數傳進去

#然後就可以把page物件(users)傳到前台進行操作

return render(requset,"

test.html

",)後端邏輯函式

3、前端頁面分頁處理

"/test2/?cur_page=}

"#"/test2/?cur_page=}

">}

"/test2/?cur_page=}

"#">

前端**

由於django系統提供的分頁功能有限,不能指定顯示多少頁,也不能定製一些其他東西,

所以我們自定製分頁的類:如下

class

custompage(object):

def__init__

(self, cur_page, per_page, total, show_page, uri):

""":param cur_page: 當前的頁數

:param per_page: 每頁的行數

:param total: 資料總行數

:param show_page: 一共顯示多少頁(分頁數量)

:param uri: 處理分頁資料的uri

"""self.per_page =per_page

self.show_page =show_page

self.uri =uri

#總行數 / 每頁的行數 a 表示正數部分 b表示小數部分

a, b =divmod(total, per_page)

ifb:

self.num_pages = a + 1

else

: self.num_pages =a

#如果亂拼寫頁數,或者不寫,就讓頁數為1

try:

self.cur_page =int(cur_page)

except

exception as e:

self.cur_page = 1

#如果url拼的頁數小於1,讓頁數為1,如果拼的頁數大於最大頁數,讓頁數為最大頁數

if self.cur_page < 1:

self.cur_page = 1

elif self.cur_page >self.num_pages:

self.cur_page =self.num_pages

defget_begin(self):

#返回當前頁開始的索引位置

return (self.cur_page - 1) *self.per_page

defget_stop(self):

#返回當前頁結束的索引位置

return self.cur_page *self.per_page

defpage_core(self):

#返回總體分頁**

half = int(self.show_page / 2)

#總頁數小於要顯示的頁數

if self.num_pages <= half * 2 + 1:

begin = 1stop = self.num_pages + 1

else

:

#提交的頁數小於1

if self.cur_page - 1 begin = 1stop = 1 + 2 * half + 1

#提交的頁數大於最大的頁數

elif self.cur_page + half >self.num_pages:

begin = self.num_pages - 2 *half

stop = self.num_pages + 1

#提交正常頁數

else

: begin = self.cur_page -half

stop = self.cur_page + half + 1stl =

#if self.cur_page <= 1:

prev_page = "

"%("

disabled")

else

: prev_page = "

" % (self.uri, self.cur_page - 1)

#頁標for num in

range(begin, stop):

if num ==self.cur_page:

sta = "

%s" % ("

active

",self.uri, num, num)

else

: sta = "

%s" %(self.uri, num, num)

#if self.cur_page >=self.num_pages:

next_page = "

"%("

disabled")

else

: next_page = "

" % (self.uri, self.cur_page + 1)

#頁面導航整體返到外面

stas = '

'.join(stl)

return stas

後端**

def

model_students(request):

ifnot

request.cookies:

return redirect('')

#先獲得要顯示的頁數

cur_page = request.get.get("

cur_page")

#獲取資料庫中資料的總行數

total =models.students.objects.count()

#呼叫類產生自定製分頁的物件

cpage = custompage(cur_page=cur_page,per_page=6,total=total,show_page=4,uri="")

#獲得開始顯示的頁數

begin =cpage.get_begin()

#獲得結束顯示的頁數

stop =cpage.get_stop()

#獲得生成的分頁**字串

page_info =cpage.page_core()

#通過切片找出需要顯示的內容

students =models.students.objects.all()[begin:stop]

#一併傳到頁面中進行渲染

return render(request, "

model_students.html

", )

後端邏輯**

前端**

Django 內建分頁

from django.core.paginator import paginator,page userlist models.user.objects.all paginator paginator userlist,10 per page 每頁顯示條目數量 count 資料總個數 num pa...

Django內建分頁擴充套件

1.url檔案 ulr檔案 from django.contrib import admin from django.urls import path urlpatterns path admin admin.site.urls path index,views.index path show vi...

Django2 1 內建分頁器

官方文件參考 python提供了內建分頁類,裡面封裝了一些屬性和方法,大大簡化了我們自定義的時間和精力,這個類位於django core paginator.py。from django.core.paginator import paginator from django.core.paginat...