Django--分頁功能


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">&laquo;</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">&raquo;</span></a></li>
              {% endif %}
       		</ul>
		</div>
    </nav>

最終效果展示


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM