2011-05-09 68 views
0

我有幾百張圖片縮略圖,每張15k。我想在每個頁面上顯示20左右。Django分頁大圖片縮略圖

請問django.core.paginator是否足夠用於這些頁面的分頁?也就是說,它只會返回當前頁面上顯示的圖像嗎? (如果沒有,那麼做什麼是一個好辦法?)謝謝。

回答

1

取決於RDBMS(影響所有數據庫,包括MySQL,Postgres等)的一大侷限。

django.core.paginator需要QuerySet代表任何種類的SQL查詢,並增加了一個LIMIT條款只得到了幾個條目從數據庫。這種方法適用於多種應用程序,但如果您有很多條目,則可能會成爲嚴重問題。特別的問題是,只要你訪問第800頁,數據庫實際上將獲取801 * 20條目,然後再丟棄第一個800 * 20條目以返回最後二十個條目。

不幸的是,沒有簡單的方法來解決這個問題。在很多情況下,下一個/上一個按鈕可能就足夠了,因此您可以編寫自己的分頁,該分頁在按鍵後操作,而不是頁碼。例如,如果用戶當前所顯示的最後一項具有關鍵"D"告訴你下一個按鈕,鏈接到/next?after=D,然後使用一個SQL查詢像SELECT * FROM objects WHERE key > d ORDER BY key LIMIT 20。這種方法的優點是,您可以在objects.key上添加索引,從而顯着加快速度。

另一種方法需要,你一個額外的,索引(!)列page_num添加到您的表。然後,您可以執行像SELECT * FROM objects WHERE page_num=800 ORDER BY key這樣的SQL查詢。採用這種方法,您仍然可以隨機訪問所有頁面,但必須保留page_num列。如果數據大部分被添加到最後,並且如果想要從中間有效地刪除/插入元素會更復雜,這可能很容易。

如此,因爲它只是1行代碼我就開始django.core.paginator。但請注意分頁視圖的響應時間以及數據庫中緩慢查詢的日誌。如果您的數據庫服務器無法處理負載,則必須選擇上述技術之一。如果隨機頁面訪問是需求,則選擇解決方案2,否則選擇解決方案1(因爲它更簡單)。

PS:是的,django.core.paginator將正常工作。 :)