1. 程式人生 > >Django分頁器

Django分頁器

digi edi disable res short 啟動 實現 需要 creat

Django分頁器

當首頁展示內容過多時,需要使用分頁來講數據傳遞給用戶,這時就可以用到Django提供的分頁器;

批量向數據庫中插入數據

1.創建表:models.py

from django.db import models

class Book(models.Model):
    name=models.CharField(max_length=32)
    price=models.DecimalField(max_digits=7,decimal_places=2)

2.創建路由url:urls.py

from django.conf.urls import url
from django.contrib import
admin from app01 import views urlpatterns = [ url(r'^admin/', admin.site.urls), url(r'^add/', views.add), ]

3.批量創建數據:views.py

from django.shortcuts import render,HttpResponse,redirect
from app01 import models

def index(request):
    pass

def add(request):
    Booklist=[]
    for
i in range(100): # 生成book對象 book_obj = models.Book(name="book"+str(i), price=30+i*i) Booklist.append(book_obj) # bulk_create 將實例化的 列表 插入到數據庫中 models.Book.objects.bulk_create(Booklist) return HttpResponse("OK")

啟動後通過url:http://127.0.0.1:8000/add/ 添加數據

分頁器Paginator模塊的使用

1.Paginator模塊功能介紹:

from django.core.paginator import Paginator, EmptyPage, PageNotAnInteger

def index(request):
    # 取出所有的書籍 100 條
    book_list=models.Book.objects.all()

    paginator=Paginator(book_list,10)          # 表示每頁展示的條數
    
    print(paginator.count)                     # 統計一共有多少條數據
    print(paginator.num_pages)                 # 表示一共多少頁
    print(paginator.page_range)                # range(1, 11) 頁數的範圍值

    page2=paginator.page(2)                    # 表示獲取第二頁的10條數據 book10--book19    
    
    # 根據當前頁 判斷是否有 上一頁和下一頁
    print(page2.has_next())                    # 是否有下一頁
    print(page2.next_page_number())            # 下一頁的頁碼
    print(page2.has_previous())                # 是否有上一頁
    print(page2.previous_page_number())        # 上一頁的頁碼

輸出:

100
10
range(1, 11)

True
3
True
1

分頁器實現

1.views.py設置:

# 待改進,如果接收得字符為 字符串 會出錯
from django.shortcuts import render,HttpResponse,redirect
from django.core.paginator import Paginator, EmptyPage, PageNotAnInteger
from app01 import models
from django.urls import reverse
# Create your views here.

def index(request):
    Book_list = models.Book.objects.all()
    paginator = Paginator(Book_list, 10)
    page = request.GET.get('page', 1)
    currentPage = int(page)

    try:

        Book_list = paginator.page(page)
    except PageNotAnInteger:
        Book_list = paginator.page(1)
    except EmptyPage:
        Book_list = paginator.page(paginator.num_pages)

    return render(request, "index.html", {"Book_list": Book_list, "paginator": paginator, "currentPage": currentPage})

2.index.html設置:

    <ul class="pagination" id="pager">
         {% if Book_list.has_previous %}
            <li class="previous"><a href="/index/?page=1">首頁</a></li>
            <li class="previous"><a href="/index/?page={{ Book_list.previous_page_number }}">上一頁</a></li>
         {% else %}
            <li class="previous active"><a href="/index/?page=1">首頁</a></li>
            <li class="previous disabled"><a>上一頁</a></li>
         {% endif %}


         {% for num in paginator.page_range %}

             {% if num == currentPage %}
               <li class="item active"><a href="/index/?page={{ num }}">{{ num }}</a></li>
             {% else %}
               <li class="item"><a href="/index/?page={{ num }}">{{ num }}</a></li>

             {% endif %}
         {% endfor %}

         {% if Book_list.has_next %}
            <li class="next"><a href="/index/?page={{ Book_list.next_page_number }}">下一頁</a></li>
            <li class="previous"><a href="/index/?page={{ paginator.num_pages }}">尾頁</a></li>
         {% else %}
            <li class="next disabled"><a>下一頁</a></li>
            <li class="previous active"><a href="/index/?page={{ paginator.num_pages }}">尾頁</a></li>
         {% endif %}
    </ul>

Django分頁器