1. 程式人生 > >Django學習之分頁器

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()) #上一頁的頁碼,返回下頁的頁碼

   

   

   

   

   

接下來,就差一點點了,處理下 “上一頁”和“下一頁”