1. 程式人生 > >python3 django動態分頁引發的list切片下標越界問題

python3 django動態分頁引發的list切片下標越界問題

顯示 動態 作者 方式 頁碼 django 比較 獲取數據 解決

起先是扒了一個包,動態分頁的,但這個包分頁之前要加載全部的數據,我這東西後臺是個爬蟲,不一定瀏覽的完所以這麽做有點浪費資源,於是我改造了一下。

# :param obj_count: 獲得 條目總數
# :param obj_perpage: 定義 每頁顯示條目數
# :param pagetag_current: 獲得 當前頁碼
# :param pagetag_dsp_count: 定義 顯示多少個頁碼

這是包的參數 根據這些實現分頁
obj_count = len(你的數據) 
之前我是爬完所有數據傳進來,現在改成直接爬總條目。

obj_count = 總條目

然後之前給頁面的值是這樣
obj=你的數據[xx.obj_slice_start:xx.obj_slice_end]
xx.obj_slice_start和xx.obj_slice_end 就是通過切片給頁面傳遞值

我看了下代碼,這倆參數是通過當前頁碼-1*條目數,當前頁碼*條目數獲得的。
比如說每頁20條,當前第2頁,就是你的數據[2-1*20:2*20]這樣。

但我改完之後因為這個時候還沒有數據,所以不能這麽用。
obj = get_data(page_list[int(pagetag_current) - 1])
這是改完之後的,自己那倆函數就不貼了,寫的比較醜。
思路就是page_list裏邊是爬取目標的所有分頁,根據pagetag_current也就是當前頁碼作為下標(0起所以-1)確定爬取的頁面,然後用get_data爬取這個頁面。

最後出問題了,排查發現是我搞錯了每頁的顯示條目,我設定的是20,但page_list裏每一頁展示的是25條,所以比如說總條目69,會分成4頁,但我page_list裏只有3頁,就是3個元素,
加載尾頁會直接越界 pagetag_current=4(尾頁)(get_data(page_list[pagetag_current) - 1 也就是3 提示越界 實際只有0 1 2]))。

解決方式就是每頁顯示的條目數=25,然後想了一下,原作者那種方式應該也會面臨越界問題,比如總條目69(為什麽總要用69做例子 因為我喜歡 你懂得),用他切片的方式就是0:20 20:40 40:60 60:80
還是大牛想的多,不像我碰到問題才去琢磨處理(雖然最後那不算處理)。
趕緊去看看他的代碼學習一下怎麽處理的,翻了2遍也沒找到處理越界的地方,最後疑惑的加了輸出測試了一下,居然就是直接給的越界下標,查了一下,我擦,原來切片越界是不報的。

不管咋說,也算是學了點新東西,雖然這個動態分頁還是不夠完美,但也算改造成功了,加載一頁爬一頁數據,不像之前分頁前就得爬完所有數據,不好地方就是現在每頁顯示的條目要根據爬取頁面的一致。下一步計劃把get_data寫的智能一些,可以精準的獲取數據。


 





python3 django動態分頁引發的list切片下標越界問題