1. 程式人生 > >分頁器(分頁器基本操作、)

分頁器(分頁器基本操作、)

分頁器基本操作

使用者訪問一個網頁或者檢視某些資料,如果資料量過大肯定需要按頁檢視,不可能一個頁面顯示N條資料內容這裡就用到了分頁器

 

  • 首先往資料庫裡插入資料,這裡咱們進行指令碼批量插入
    # #指令碼批量插入資料
    book_list = []
    for i in range(200):
        #建立200條資料
        book = Book(title='book_%s'%i,price=i*i)
        book_list.append(book)
    #批量插入語法
    Book.objects.bulk_create(book_list)

這樣一條insert語句包含多條資料,一次性插入

 

  • 分頁器的基本語法及使用
def index(request):

    #分頁器對使用

    #book_list = Book.objects.all()
    #這裡建議使用該種方法獲取Book物件的列表,否則會出現 ‘UnorderedObjectListWarning: Pagination may yield inconsistent results with an unordered object_list:’
的報警資訊。
book_list = Book.objects.get_queryset().order_by('id')

paginator
= Paginator(book_list,10) #多少資料分一頁 print('coumt:',paginator.count) #資料總數 print('num_pages:',paginator.num_pages) #總頁數 print('page_range:',paginator.page_range) #頁碼列表 #獲取某頁的方式 #方式一 page1=paginator.page(1) #獲取第一頁的page物件 #方式二 for i in page1: #遍歷第一頁的所有資料
print(i) #根據使用者選擇來進行頁面顯示,獲取使用者的頁數 try: #這裡捕獲異常到目的就是為了使用者選擇頁碼以外到值不會報錯 current_page=int(request.GET.get('page',1)) #這裡要記得傳一個預設值否則會報錯,因為views 沒有獲取到page這個引數 current_page=paginator.page(current_page) except EmptyPage as e: current_page =paginator.page(1) return render(request,'index.html',locals())

#輸出內容

coumt: 200
num_pages: 20
page_range: range(1, 21)
Book object (1)
Book object (2)
Book object (3)
Book object (4)
Book object (5)
Book object (6)
Book object (7)
Book object (8)
Book object (9)
Book object (10)

 

  • 前端頁面的顯示,傳遞分頁過後的物件
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>分頁器</title>
</head>
<body>
<ul>
{#這裡傳遞分頁過後到內容#}
    {% for book in current_page %}
        <li>{{ book.title }} : {{ book.price  }}</li>
    {% endfor %}

</ul>

</body>
</html>
  • 效果圖

因為預設訪問顯示的為第一頁內容,如是果想訪問其他頁需要 給後端傳遞 page 引數

更換頁碼 URL