Django--分頁功能
需要用到django中的Paginator模塊
導入:from django.core.paginator import Paginator
本案例以圖書管理為模版
class BorrowBook(models.Model):
"""
借出圖書查詢
"""
reader = models.ForeignKey(Reader, on_delete=models.CASCADE)
# manager = models.ForeignKey(Manager, on_delete=models.CASCADE)
borrow_book = models.DateTimeField(auto_now_add=True)
restore_book = models.DateTimeField()
book_state = models.CharField(max_length=50)
books = models.ForeignKey(Books, on_delete=models.CASCADE)
數據庫中的數據
開始分頁制作
-
導入分頁模塊
from django.core.paginator import Paginator
-
查詢所有數據列表queryset對象
book_list = BorrotBook.objects.all()
-
實例化對象
paginator = Paginator(book_list, 10)
-
Paginator類對象的屬性
序號 屬性名 說明 1 num_pages 返回分頁之后的總頁數 2 page_range 返回分頁后的頁碼列表 -
Paginator類對象的方法
序號 方法名 說明 1 page(self, number) 返回第number頁的page類實例對象 -
Page實例對象的屬性
序號 屬性名 說明 1 number 返回當前頁的頁碼 2 object_list 返回當前頁的數據查詢集 3 paginator 返回對應的Paginator類對象 -
page實例對象的方法
序號 方法名 說明 1 has_previous 判斷當前頁是否有前一頁 2 has_next 判斷當前頁是否有下一頁 3 previous_page_number 返回前一頁的頁碼 4 next_page_number 返回下一頁的頁碼
寫views函數
# 帶返回值參數的views函數
def borrow_show(request, pindex):
"""
已借圖書查詢並展示到前端頁面
"""
book_obj = BorrowBook.objects.all() # 獲取借書表中所有的數據
book_list = [] # 創建一個空列表,存放當前登陸人所借過的書
for i in book_obj: # 遍歷所有的借書記錄,查找到當前登陸人所借的書,並放入空列表
if i.reader.read_code == request.session["user_id"]:
book_list.append(i)
paginator = Paginator(book_list, 5) # 實例化Paginator, 每頁顯示5條數據
if pindex == "": # django中默認返回空值,所以加以判斷,並設置默認值為1
pindex = 1
else: # 如果有返回在值,把返回值轉為整數型
int(pindex)
page = paginator.page(pindex) # 傳遞當前頁的實例對象到前端
context = {"message": request.session["user_name"], "page": page}
return render(request, "books/borrow_show.html", context)
urls配置
from django.urls import path
from .import views
app_name = "books"
urlpatterns = [
# 已借圖書查詢並展示
path("borrow_show/<pindex>", views.borrow_show, name="borrow_show"),
]
Html中配置
<--當前頁內容遍歷展示-->
{%for item in page%}
<tr>
<td width="120px">{{forloop.counter}}</td>
<td width="150px"><a href="" style="color: #0f0f0f"> {{item.books.book_name}}</a></td>
<td width="120px">{{item.books.book_author}}</td>
<td width="120px">{{item.books.book_price}}</td>
<td width="120px">{{item.books.book_concern}}</td>
<td width="120px">{{item.books.book_type.book_type}}</td>
<td width="120px">{{message}}</td>
<td width="120px">{{item.borrow_book}}</td>
</tr>
{%endfor%}
<--底部分頁按鈕顯示-->
<nav aria-label="Page navigation">
<div class="pagination">
<ul class="pagination">
{% if page.has_previous %} # 判斷當前頁是否有上一頁
<li><a href="/books/borrow_show/{{page.previous_page_number}}" aria-label="Previous">
<span aria-hidden="true">«</span></a></li>
{% endif %}
{% for num in page.paginator.page_range%} # 循環遍歷頁碼列表,並展示到底部
{%if pindex == page.number%}
<li><a href="">{{ num }}</a></li>
{%else%}
<li><a href="/books/borrow_show/{{num}}">{{ num }}</a></li>
{%endif%}
{% endfor %}
{% if page.has_next %} # 判斷當前頁是否有下一頁
<li><a href="/books/borrow_show/{{page.next_page_number}}" aria-label="Next">
<span aria-hidden="true">»</span></a></li>
{% endif %}
</ul>
</div>
</nav>