django分页实现
生活随笔
收集整理的這篇文章主要介紹了
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分页实现的全部內容,希望文章能夠幫你解決所遇到的問題。