1. 程式人生 > >DJANGO 自定義分頁組件

DJANGO 自定義分頁組件

ret ref 前端 nav exce open 分享圖片 pro paginati

第一次在碼雲上面分享代碼片段,記錄一下:

https://gitee.com/trunkslisa/codes/14gkxi3zf9e2ulbvjnqyo90

技術分享圖片
class Pagination(object):
    def __init__(self, totalCount, currentPage, perPageNum=20, maxPageNum=7):
        # 傳入:
        # -所有數據的個數 totalCount
        self.totalCount = totalCount

        # -當前頁       currentPage
try: v = int(currentPage) if v < 0: v = 1 self.currentPage = v except Exception as e: self.currentPage = 1 # -每頁顯示??行 perPageNum self.perPageNum = perPageNum # -最多顯示??頁 maxPageNum self.maxPageNum = maxPageNum
# 開始條數 def start(self): return (self.currentPage - 1) * self.perPageNum # 結束條數 def end(self): return self.currentPage * self.perPageNum # 總頁數 # 采用這個裝飾器以後,本來需要用self.num_pages()這個方法的,後面的括號可以不用寫了 @property def num_pages(self): # 取余數,不等於0的+1 a, b = divmod(self.totalCount, self.perPageNum)
if b == 0: return a return a+1 # 根據情況生成相應的頁碼list def pager_num_range(self): # range應該根據當前頁動態生成,自定制顯示數量 # 代指當前頁 #self.current_page # 最多顯示的頁碼數量 #self.per_page_num # 總頁數 #self.num_pages # 判斷一下傳入的頁碼是否大於總頁數 if self.currentPage > self.num_pages: self.currentPage = self.num_pages # 總頁數小於當前頁 if self.num_pages < self.currentPage: return range(1, self.num_pages+1) # 總頁數有很多 part = int(self.maxPageNum/2) #拿到顯示總數量的一半 if self.currentPage <= part: return range(1, self.maxPageNum+1) # 判斷當前頁+part大於最後一頁,顯示最後一頁至最後一頁往前的per_pager_num的數量+1 if (self.currentPage + part) > self.num_pages: return range(self.num_pages - self.maxPageNum + 1, self.num_pages+1) return range(self.currentPage - part, self.currentPage + part + 1) def page_str(self): page_list = [] #首頁 first = <li><a href="/index3.html?p=1">首頁</a></li> page_list.append(first) #增加上一頁 if self.currentPage == 1: prev = <li><a href="#">上一頁</a></li> else: prev = <li><a href="/index3.html?p=%s">上一頁</a></li> % (self.currentPage - 1) page_list.append(prev) #增加頁碼 for i in self.pager_num_range(): #給當前頁做特殊標識 if i == self.currentPage: temp = <li class="active"><a>%s</a></li> %(i) else: temp = <li><a href="/index3.html?p=%s">%s</a></li> %(i,i) page_list.append(temp) #增加下一頁 if self.currentPage >= self.num_pages: nex = <li><a href="#">下一頁</a></li> else: nex = <li><a href="/index3.html?p=%s">下一頁</a></li> %(self.currentPage + 1) page_list.append(nex) #增加尾頁 last = <li><a href="/index3.html?p=%s">尾頁</a></li> %(self.num_pages) page_list.append(last) return ‘‘.join(page_list)
通過自定制的py文件,今後可以方便的引用分頁組件 技術分享圖片
from app01.pager import Pagination
from django.shortcuts import render
from django.core.paginator import Paginator, EmptyPage, PageNotAnInteger

USER_LIST = []
for i in range(1, 666):
    temp = {name: root + str(i), age: i}
    USER_LIST.append(temp)

def index(request):
    
    current_Page = request.GET.get(p)
    #這裏的666是個模擬數據,實際使用中應用實際數量替換該位置
    page_obj = Pagination(666, current_Page)
    #這裏的USER_LIST是自己創建的模擬數據,主要為頁面展示使用
    data_list = USER_LIST[page_obj.start():page_obj.end()]
    return render(request, index3.html, {data: data_list, page_obj: page_obj})
分頁組件引用方式 技術分享圖片
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
    <link rel="stylesheet" href="/static/plugins/bootstrap/css/bootstrap.css">
</head>
<body>

<ul>
    {% for row in data %}
        <li>{{ row.name}}-{{ row.age }}</li>
    {% endfor %}
</ul>

<nav aria-label="...">
    <ul class="pagination pagination-sm">
        {{ page_obj.page_str|safe }}
    </ul>
</nav>

</body>
</html>
分頁前端展示,引入了bootstarp模塊進行了美化

DJANGO 自定義分頁組件