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

歡迎訪問 生活随笔!

生活随笔

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

编程问答

Diango博客--15.通过 Django Pagination 实现简单分页(一)

發布時間:2023/12/20 编程问答 35 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Diango博客--15.通过 Django Pagination 实现简单分页(一) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

文章目錄

    • 0.思路引導
    • 1.Paginator 類的常用方法
    • 2.用 Paginator 給文章列表分頁
    • 3.在模板中設置分頁導航
    • 4.效果展示

0.思路引導

1)當博客上發布的文章越來越多時,通常需要進行分頁顯示,以免所有的文章都堆積在一個頁面,影響用戶體驗。

2)Django 內置的 Pagination 能夠幫助我們實現簡單的分頁功能

1.Paginator 類的常用方法

分頁功能由 Django 內置的 Paginator 類提供,這個類位于 django.core.paginator 模塊,需要使用它時,只需在適當的地方導入即可:

from django.core.paginator import Paginator

使用時需實例化一個 Paginator 對象,并在實例化時傳入一個需要分頁的列表對象,就可以得到分頁后的對象。

# 對 item_list 進行分頁,每頁包含 2 個數據。 >>> item_list = ['john', 'paul', 'george', 'ringo'] >>> p = Paginator(item_list, 2)

具體的使用請查看官方文檔

2.用 Paginator 給文章列表分頁

Django 的官方文檔中給出了一個在視圖函數中對列表進行分頁的示例,下面的視圖函數獲取一個聯系人列表并對其分頁:

from django.core.paginator import Paginator, EmptyPage, PageNotAnInteger from django.shortcuts import renderdef listing(request):contact_list = Contacts.objects.all()paginator = Paginator(contact_list, 25) # 每頁顯示 25 個聯系人page = request.GET.get('page')try:contacts = paginator.page(page)except PageNotAnInteger:# 如果用戶請求的頁碼號不是整數,顯示第一頁contacts = paginator.page(1)except EmptyPage:# 如果用戶請求的頁碼號超過了最大頁碼號,顯示最后一頁contacts = paginator.page(paginator.num_pages)return render(request, 'list.html', {'contacts': contacts})

這就是在視圖函數中使用分頁的代碼邏輯,你可以把它當做一個模板應用于自己的任何需要分頁的視圖函數。

不過在我們的博客項目中,我們已將視圖函數轉換成了類視圖。而類視圖 ListView 已經幫我們寫好了上述的分頁邏輯,我們只需通過指定 paginate_by 屬性來開啟分頁功能即可,即在類視圖中指定 paginate_by 屬性的值:

文件位置:blog/views.py

class IndexView(ListView):model = Posttemplate_name = 'blog/index.html'context_object_name = 'post_list'# 指定 paginate_by 屬性后開啟分頁功能,其值代表每一頁包含多少篇文章paginate_by = 10

這里我們設置了每 10 篇文章一頁。

3.在模板中設置分頁導航

接下來便是在模板中設置分頁導航,比如上一頁、下一頁的按鈕,以及顯示一些頁面信息。

ListView 傳遞了以下和分頁有關的模板變量供我們在模板中使用:

  • paginator ,即 Paginator 的實例。
  • page_obj ,當前請求頁面分頁對象。
  • is_paginated,是否已分頁。只有當分頁后頁面超過兩頁時才算已分頁。
  • object_list,請求頁面的對象列表,和 post_list 等價。所以在模板中循環文章列表時可以選 post_list ,也可以選
    object_list。

文件位置:templates/blog/index.html

{% if is_paginated %} <div class="pagination-simple"><!-- 如果當前頁還有上一頁,顯示一個上一頁的按鈕 -->{% if page_obj.has_previous %}<a href="?page={{ page_obj.previous_page_number }}">上一頁</a>{% endif %}<!-- 顯示當前頁面信息 --><span class="current">{{ page_obj.number }}/{{ paginator.num_pages }}</span><!-- 如果當前頁還有下一頁,顯示一個下一頁的按鈕 -->{% if page_obj.has_next %}<a href="?page={{ page_obj.next_page_number }}">下一頁</a>{% endif %} </div> {% endif %}

另外需要注意的是,請求目的頁,是通過 page 查詢參數傳遞給 django 視圖,django 會根據 page 的值返回對應頁面的文章列表,所以上一頁和下一頁超鏈接的 href 屬性指向的 url 帶上了 page 查詢參數。

4.效果展示

總結

以上是生活随笔為你收集整理的Diango博客--15.通过 Django Pagination 实现简单分页(一)的全部內容,希望文章能夠幫你解決所遇到的問題。

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