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

歡迎訪問 生活随笔!

生活随笔

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

编程问答

django分页实现

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

Django分頁

Django提供了一個類Paginator用于分頁,但Paginator并不具體管理具體的頁的處理,而是使用Page對象管理具體頁面。下面我們以一個具體的例子來說明一下分頁的實現

文章模型:

class Articles(models.Model):tid = models.AutoField(primary_key=True)cid = models.ForeignKey('Category', models.DO_NOTHING, db_column='cid', blank=True, null=True)description = models.CharField(max_length=300)title = models.CharField(max_length=255)content = models.CharField(max_length=20000, blank=True, null=True)author = models.CharField(max_length=255, blank=True, null=True)pub_date = models.DateTimeField()replycount = models.IntegerField(blank=True, null=True)hits = models.IntegerField()isdeleted = models.IntegerField()noreply = models.IntegerField(blank=True, null=True)iscreator = models.IntegerField(blank=True, null=True)isrecommend = models.IntegerField(blank=True, null=True)tags = models.CharField(max_length=255, blank=True, null=True)class Meta:db_table = 'articles'

表中數據:

分頁器對象

格式: Paginator(<query_set查詢集>,每頁顯示數據的條數)

  • 對象的屬性

    count 分頁對象的個數

    num_pages 總頁數

    page_range 頁碼的列表

  • 方法

    page(num) 返回page對象 如果給定的頁碼不存在 則拋出異常

例子代碼:

# 需要導入Paginator類 from django.core.paginator import Paginator pagination = Paginator(articles,10)

page 對象

page對象具體負責每頁的處理,包括每頁的數據,當前頁的頁碼,是否有上一頁或下一頁等。

類別名稱說明
屬性object_list當前頁碼上的所有數據
屬性number當前頁碼值
屬性paginator返回Paginator的對象
方法has_next是否有下一頁
方法has_previous是否有上一頁
方法has_other_pages是否有上一頁 或者下一頁
方法next_page_number返回下一頁的頁碼
方法previous_page_number返回上一頁的頁碼
方法len返回當前頁數據的個數

使用:

# 由分頁器對象調用page方法創建,參數是當前頁碼 pager = pagination.page(page)

具體例子

路由配置(urls.py)

from django.urls import path from App import views app_name = "App" urlpatterns = [#.....path("list/<int:page>/",views.article_list),]

視圖(views.py)

# views.py def article_list(request,page=1):articles = Articles.objects.all()# 實例化分頁對象,一頁兩條記錄pagination = Paginator(articles,10)page = pagination.page(page) #某一頁的分頁對象return render(request,'userlist.html',locals())

前端頁面(list.html)

使用了bootstrap的樣式

<!-- 部分代碼 --> <div class="page-box layui-row"><div id="pageItem"><nav aria-label="Page navigation"><ul class="pagination">{# 判斷是不是有前一頁 #}{% if pager.has_previous %}<li><a href="/list/{{ pager.previous_page_number }}/" aria-label="Previous"><span aria-hidden="true">?</span></a></li>{% else %}{# 如果沒有前一頁 禁止點擊前一頁 #}<li class="disabled"><a href="/list/{{ page }}/" aria-label="Previous"><span aria-hidden="true">?</span></a></li>{% endif %}{# 循環生成頁碼, page_range是一個整數頁碼列表 #}{% for cur in pagination.page_range %}{# 判斷是不是當前頁,如果是高亮顯示 #}{% if cur == page %}<li class="active"><a href="/list/{{ cur }}/">{{ cur }}</a></li>{% else %}<li><a href="/list/{{ cur }}/">{{ cur }}</a></li>{% endif %}{% endfor %}{# 判斷是不是有下一頁 #}{% if pager.has_next %}<li><a href="/list/{{ pager.next_page_number }}/" aria-label="Next"><span aria-hidden="true">?</span></a></li>{% else %}<li class="disabled"><a href="/list/{{ page }}/" aria-label="Next"><span aria-hidden="true">?</span></a></li>{% endif %}</ul></nav></div></div>

最終效果:

總結

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

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