分頁器(分頁器基本操作、)
阿新 • • 發佈:2018-12-09
分頁器基本操作
使用者訪問一個網頁或者檢視某些資料,如果資料量過大肯定需要按頁檢視,不可能一個頁面顯示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