日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

django 分页

發布時間:2024/1/1 编程问答 23 豆豆
生活随笔 收集整理的這篇文章主要介紹了 django 分页 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

Django自帶分頁:

?導入:? ? from django.core.paginator import Paginator, EmptyPage, PageNotAnInteger

含有兩個對象可以互相調用:page對象? paginator 對象

對象方法不相同??

paginator 對象方法:

????????????????par_page:? ? ? ? ? ?每頁顯示條目數量
????????????? ? cout:? ? ? ? ? ? ? ? ? 數據總個數
????????? ? ? ? num_pages:? ? ? 總頁數
????????????? ? page_range:? ?總頁數的索引范圍(1,100)

????????????? ? page:? ? ? ? ? ? ? page對象

page對象方法:

?????????has_next? ? ? ? ? ? ? ? ? ?是否有下一頁
? ? ? ? ?next_page_number? 下一頁頁碼
? ? ? ? ?has_previous? ? ? ? ? ? 是否有上一頁
? ? ? ? ?object_list? ? ? ?????? ? ? 分頁之后的數據列表
? ? ? ? ?number? ? ? ? ? ? ????????當number前頁
? ? ? ? ?paginator? ? ? ? ?????????paginator對象


自定顯示頁碼


————————————————————————————————————————————————————


class CustomPaginator(Paginator):def __init__(self,current_page, per_pager_num,*args,**kwargs):# 當前頁self.current_page = int(current_page)# 最多顯示的頁碼數量 11self.per_pager_num = int(per_pager_num)super(CustomPaginator,self).__init__(*args,**kwargs)def pager_num_range(self):# 當前頁#self.current_page# 最多顯示的頁碼數量 11#self.per_pager_num# 總頁數# self.num_pagesif self.num_pages < self.per_pager_num:return range(1,self.num_pages+1)# 總頁數特別多 5part = int(self.per_pager_num/2)if self.current_page <= part:return range(1,self.per_pager_num+1)if (self.current_page + part) > self.num_pages:return range(self.num_pages-self.per_pager_num+1,self.num_pages+1)return range(self.current_page-part,self.current_page+part+1)def index1(request):current_page = request.GET.get('p')# Paginator對象paginator = CustomPaginator(current_page,7,USER_LIST, 10)try:posts = paginator.page(current_page)except PageNotAnInteger:posts = paginator.page(1)except EmptyPage:posts = paginator.page(paginator.num_pages)return render(request,'index1.html',{'posts':posts})

原版分頁parger.html

{% if posts.has_previous %}<a href="index1?p={{ posts.previous_page_number }}">上一頁</a> {% endif %} {% if posts.has_next %} <a href="index1?p={{ posts.next_page_number}}">下一頁</a> {% endif %}{% for i in posts.paginator.pager_num_range %}{% if i == posts.number %}<a href="index1?p={{ i }}" style="font-size: 30px"> {{ i }}</a>{% else %}<a href="index1?p={{ i }}">{{ i }}</a>{% endif %} {% endfor %}<span> {{ posts.number }}</span> <span>/ {{ posts.paginator.num_pages }}</span>

HTML文件

{% for row in posts%}<li>{{ row.name }}{{ row.age }}</li> {% endfor %} </ul>{% include 'include/parger.html' %}

自定制分頁顯示

pager.py

# -*- coding:utf-8 -*-class Pagination(object):def __init__(self, totalCount, currentPage,perPageItemNum=10, maxPageNum=7):# 數據總個數self.total_count = totalCount# 當前頁try:v = int(currentPage)if v <= 0:v = 1self.current_page = vexcept Exception as e:self.current_page = 1# 每頁顯示的行數self.per_page_item = perPageItemNum# 每頁最多顯示頁碼數self.max_page_num = maxPageNumdef start(self):return (self.current_page-1) * self.per_page_itemdef end(self):return self.current_page * self.per_page_item@propertydef num_pages(self):# 判斷極值# 總頁數199 每頁顯示a,b = divmod(self.total_count,self.per_page_item)if b == 0:return areturn a+1# 要顯示的頁碼def pager_num_range(self):# 當前頁# self.current_page# 最多顯示的頁碼數量 11# self.per_pager_num# 總頁數# self.num_pagesif self.num_pages < self.max_page_num:return range(1, self.num_pages + 1)# 總頁數特別多 5part = int(self.max_page_num / 2)if self.current_page <= part:return range(1, self.max_page_num + 1)if (self.current_page + part) > self.num_pages:return range(self.num_pages - self.max_page_num + 1, self.num_pages + 1)return range(self.current_page - part, self.current_page + part + 1)# 返回前端頁面的字符串def page_str(self):page_list = []first="<li><a href='/index2.html?p=1'>首頁</a></li>"page_list.append(first)if self.current_page == 1:prev = "<li><a href='#'>上一頁</a></li>"else:prev = "<li><a href='/index2.html?p=%s'>上一頁</a></li>" % (self.current_page - 1,)page_list.append(prev)for i in self.pager_num_range():if i == self.current_page:temp = "<li class='active'><a href='/index2.html?p=%s'>%s</a></li>" % (i, i)else:temp = "<li><a href='/index2.html?p=%s'>%s</a></li>" % (i, i)page_list.append(temp)if self.current_page == self.num_pages:nex = "<li><a href='#'>下一頁</a></li>"else:nex = "<li><a href='/index2.html?p=%s'>下一頁</a></li>" % (self.current_page + 1,)page_list.append(nex)last = "<li><a href='/index2.html?p=%s'>尾頁</a></li>" % (self.num_pages,)page_list.append(last)return "".join(page_list)

views.py

def index2(request):# 導入自定義py文件from app01.pager import Pagination# 獲取當前頁current_page = request.GET.get('p')# 創建對象傳入值 199總數page_obj = Pagination(199,current_page)# 切片傳入值data_list = USER_LIST[page_obj.start():page_obj.end()]return render(request,'index2.html',{"data":data_list,'page_obj':page_obj})

html 文件

{% for row in data%}<li>{{ row.name }}{{ row.age }}</li> {% endfor %} </ul>{% for i in page_obj.pager_num_range %}<a href="/index2.html?p={{ i }}">{{ i }}</a>{% endfor %}<ul class="pagination pagination-sm">{{ page_obj.page_str|safe }}</ul>



總結

以上是生活随笔為你收集整理的django 分页的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。