Django的分頁器paginator
檔案為pageDemo
models.py
from django.db import models
# Create your models here.
class Book(models.Model):
title = models.CharField(max_length=32)
price = models.DecimalField(decimal_places=2, max_digits=8)
views.py
from django.shortcuts import render
# Create your views here.
from .models import Book
from django.core.paginator import Paginator, EmptyPage
def index(request):
'''
批量匯入: #批量匯入資料庫檔案里邊
book_list = []
for i in range(100):
book = Book(title="book_%s"%i, price=i*i) #實體化一個book物件;
book_list.append(book) #實體化出100個物件;
Book.objects.bulk_create(book_list) #批量插入
return render(request, "index.html")
:param request:
:return:
'''
book_list = Book.objects.all() #拿到所有書籍資料
#分頁器
paginator = Paginator(book_list, 8) #對誰分頁,一頁顯示多少條資料 總的分頁器物件
print("count:",paginator.count) #資料總數 列印:count:100
print("num_pages",paginator.num_pages) #總頁數 num_pages:13
print("page_range",paginator.page_range) #頁碼的串列 page_range range(1,14)
try: #page數字超了或者不在那個回傳里就會拋出一個EmptyPage的錯誤
current_page_num = int(request.GET.get("page", 1)) #做成一個動態的效果,給它個默認值拿第一頁,不加1就會回傳一個None,當前想要的第幾頁的資料
current_page = paginator.page(current_page_num) #拿到第幾頁的page物件,
#顯示某一頁具體資料的兩種方式:
print("object_list", current_page.object_list)
for i in current_page:
print(i)
except EmptyPage as e:
current_page=paginator.page(1) #拿到第一頁的page物件
return render(request, "index.html", locals())
index.html
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
<!-- 最新版本的 Bootstrap 核心 CSS 檔案 -->
<link rel="stylesheet" href="https://cdn.bootcss.com/bootstrap/3.3.7/css/bootstrap.min.css" integrity="sha384-BVYiiSIFeK1dGmJRAkycuHAHRg32OmUcww7on3RYdg4Va+PmSTsz/K68vbdEjh4u" crossorigin="anonymous">
</head>
<body>
<ul>
{% for book in current_page %}
<li>{{ book.title }}:{{ book.price }}</li>
{% endfor %}
</ul>
<nav aria-label="Page navigation"> //分頁的頁面
<ul >
{% if current_page.has_previous %} //上一頁:當前頁碼-1 ---> href="https://www.cnblogs.com/hackerer/p/?page={{current_page_num|add:-1}}或者下面這種寫法 ;判斷當前頁是否還有上一頁、下一頁

