Django學習之分頁器
1>資料批量插入
網站內容記錄很多,必然要分頁顯示,比如100條資料,每頁顯示10條,那麼總共就有10頁,點選對應的頁籤,則
顯示相應的內容,實現這個需求之前,我們先看怎麼對mysql批量插入資料,
一個方法,for迴圈再插入,如下,
for i in range(1, 101): Book.objects.create(title='book_%s'%i, price=i**2)
但這個方法始終都是“一條一條”插入的,翻譯成sql語句其實就是有100條insert語句,很明顯,效率不是太高,
其實dajngo中自帶一個批量插入的語法,可以把迴圈出來的資料一次性插入資料庫,就相當於一條sql語句實現了
資料的插入,效率明顯高多了,推薦大家使用這種方法,如下:
2>資料顯示
3>分頁顯示效果
先說幾個概念,匯入分頁器模組,加粗的都是分頁器經常使用的方法
from django.core.paginator import Paginator
book_obj = Book.objects.all()
paginator = Paginator(book_obj, 10) # 生成分頁器,兩個引數,一個被分頁物件,一個是每頁顯示記錄條數 print("count:",paginator.count) # 資料總數 print("num_pages",paginator.num_pages) # 總頁數 print("page_range",paginator.page_range) # 頁碼的列表
page1=paginator.page(1) # 第1頁的page物件 for i in page1: # 遍歷第1頁的所有資料物件 print(i) print(page1.object_list) # 第1頁的所有資料
如上,有了這個根據頁數取物件的函式,我們可以把這個頁數傳遞給url,url接收到頁數值,再顯示對應頁數的資料,
通過給url傳遞引數page(get請求傳值,url後面加?再加值),來進行分頁的資料顯示,如下
當通過不同的page頁數,便實現了顯示不同內容的效果,
如上,url輸入不同的page頁數,顯示了不同的資料物件,
下面的分頁器是直接從bootstrap官網拷貝的,接下來就是通過點選頁數來傳遞這個page引數,控制分頁顯示。
以上,便實現了簡單版的分頁顯示效果,恩,這是資料量小的時候,若我們資料量很大時,會出現如下效果
很顯然,讓所有的頁籤數都顯示出來,不太合理,需要優化下。
4>分頁效果優化
當頁數實在太多時,我們不可能把所有的頁數全部顯示出來,比如我固定就顯示7頁,當我點選“中間”一些頁數的時候,
兩邊固定顯示前3頁和後3頁,改動如下:
同樣,先引入幾個概念,等下會用到
current_page = paginator.page(current_page)
print(current_page.has_next()) #是否有下一頁,返回bool值 print(current_page.next_page_number()) #下一頁的頁碼,返回下頁的頁碼 print(current_page.has_previous()) #是否有上一頁,返回bool值 print(current_page.previous_page_number()) #上一頁的頁碼,返回下頁的頁碼
接下來,就差一點點了,處理下 “上一頁”和“下一頁”