Django框架全面講解 分頁

2021-08-22 05:58:21 字數 4975 閱讀 6850

django內建分頁

from django.shortcuts import render

from django.core.paginator import paginator, emptypage, pagenotaninteger

l =

for i in range(999):

def index(request):

current_page = request.get.get('p')

paginator = paginator(l, 10)

# per_page: 每頁顯示條目數量

# count: 資料總個數

# num_pages:總頁數

# page_range:總頁數的索引範圍,如: (1,10),(1,200)

# page: page物件

try:

posts = paginator.page(current_page)

# object_list 分頁之後的資料列表

# number 當前頁

# paginator paginator物件

except pagenotaninteger:

posts = paginator.page(1)

except emptypage:

posts = paginator.page(paginator.num_pages)

return render(request, 'index.html', )

previous

page } of }.

next

from django.shortcuts import render

from django.core.paginator import paginator, emptypage, pagenotaninteger

class custompaginator(paginator):

def __init__(self, current_page, max_pager_num, *args, **kwargs):

""":param current_page: 當前頁

:param max_pager_num:最多顯示的頁碼個數

:param args:

:param kwargs:

:return:

"""self.current_page = int(current_page)

self.max_pager_num = max_pager_num

super(custompaginator, self).__init__(*args, **kwargs)

def page_num_range(self):

# 當前頁面

# self.current_page

# 總頁數

# self.num_pages

# 最多顯示的頁碼個數

# self.max_pager_num

print(1)

if self.num_pages < self.max_pager_num:

return range(1, self.num_pages + 1)

print(2)

part = int(self.max_pager_num / 2)

if self.current_page - part < 1:

return range(1, self.max_pager_num + 1)

print(3)

if self.current_page + part > self.num_pages:

return range(self.num_pages + 1 - self.max_pager_num, self.num_pages + 1)

print(4)

return range(self.current_page - part, self.current_page + part + 1)

l =

for i in range(999):

def index(request):

current_page = request.get.get('p')

paginator = custompaginator(current_page, 11, l, 10)

# per_page: 每頁顯示條目數量

# count: 資料總個數

# num_pages:總頁數

# page_range:總頁數的索引範圍,如: (1,10),(1,200)

# page: page物件

try:

posts = paginator.page(current_page)

# object_list 分頁之後的資料列表

# number 當前頁

# paginator paginator物件

except pagenotaninteger:

posts = paginator.page(1)

except emptypage:

posts = paginator.page(paginator.num_pages)

return render(request, 'index.html', )

previous

}next

page } of }.

2.自定義分頁 

分頁功能在每個**都是必要的,對於分頁來說,其實就是根據使用者的輸入計算出應該在資料庫表中的起始位置。

1、設定每頁顯示資料條數

2、使用者輸入頁碼(第一頁、第二頁…)

3、根據設定的每頁顯示條數和當前頁碼,計算出需要取資料表的起始位置

4、在資料表中根據起始位置取值,頁面上輸出資料

1、設定每頁顯示資料條數

2、使用者輸入頁碼(第一頁、第二頁…)

3、設定顯示多少頁號

4、獲取當前資料總條數

5、根據設定顯示多少頁號和資料總條數計算出,總頁數

6、根據設定的每頁顯示條數和當前頁碼,計算出需要取資料表的起始位置

7、在資料表中根據起始位置取值,頁面上輸出資料

#!/usr/bin/env python

# _*_coding:utf-8_*_

from django.utils.safestring import mark_safe

class pageinfo(object):

def __init__(self,current,totalitem,peritems=5):

self.__current=current

self.__peritems=peritems

self.__totalitem=totalitem

def from(self):

return (self.__current-1)*self.__peritems

def to(self):

return self.__current*self.__peritems

def totalpage(self): #總頁數

result=divmod(self.__totalitem,self.__peritems)

if result[1]==0:

return result[0]

else:

return result[0]+1

def custompager(baseurl,currentpage,totalpage): #基礎頁,當前頁,總頁數

perpager=11

#總頁數<11

#0 -- totalpage

#總頁數》11

#當前頁大於5 currentpage-5 -- currentpage+5

#currentpage+5是否超過總頁數,超過總頁數,end就是總頁數

#當前頁小於5 0 -- 11

begin=0

end=0

if totalpage <= 11:

begin=0

end=totalpage

else:

if currentpage>5:

begin=currentpage-5

end=currentpage+5

if end > totalpage:

end=totalpage

else:

begin=0

end=11

pager_list=

if currentpage<=1:

first="首頁"

else:

first="首頁" % (baseurl,1)

if currentpage<=1:

else:

for i in range(begin+1,end+1):

if i == currentpage:

temp="%d" % (baseurl,i,i)

else:

temp="%d" % (baseurl,i,i)

if currentpage>=totalpage:

else:

if currentpage>=totalpage:

last="末頁"

else:

last="末頁" % (baseurl,totalpage)

result=''.join(pager_list)

return mark_safe(result) #把字串轉成html語言

總結,分頁時需要做三件事:

建立處理分頁資料的類

根據分頁資料獲取資料

Django框架全面講解

第一篇web框架 第二遍初識django 第三篇資料庫與orm 第四篇django之模板語言 第五篇django url name 詳解 第六篇 orm 操作大全 第七篇 django 認證系統 第八篇django分頁 第九篇 ajax 第十篇 form表單 第十一篇 中介軟體 第十二篇檢視層之檢視...

Django框架全面講解 Form

django中的form一般有兩種功能 輸入html 驗證使用者輸入 usr bin env python3 coding utf 8 import re from django import forms from django.core.exceptions import validationer...

Django框架全面講解 admin

django amdin是django提供的乙個後台管理頁面,改管理頁面提供完善的html和css,使得你在通過model建立完資料庫表之後,就可以對資料進行增刪改查,而使用django admin 則需要以下步驟 建立後台管理員 配置url 註冊和配置django admin後台管理頁面1 建立後...