2017-09-03 43 views
1

的Django 1.11.4分頁並獲得參數

我必須建立與方法的搜索形式=「獲取」。 搜索表單有很多形式。 然後,這個輸入值作爲get參數在url中傳輸。

問題是如何獲得分頁。該數據庫包含數千個對象。分頁是必要的。

這是個什麼文件告訴我們:

https://docs.djangoproject.com/en/1.11/topics/pagination/#using-paginator-in-a-view

,提示是這樣的:

<a href="?page={{ contacts.previous_page_number }}">previous</a> 

但是,這會毀了所有的GET參數。

我已成功地發明是:

<a href="{{ request.get_full_path }}&page={{ object_list.previous_page_number }}">previous</a> 

這工作。但這是愚蠢的。如果一個向前和向後切換頁面,它會產生這樣結尾的網址:

page=2&page=3&page=2 

我不得不看看谷歌是如何管理這個問題。在url的中間,他們開始= 30。並更改此參數:開始= 20,開始= 40。所以,他們切換。

你能幫我理解在Django中如何保存參數和切換頁面嗎?當然,以一種優雅的方式。

+0

我有一個模板標籤我在Github上重用此目的:https://gist.github.com/benbacardi/d6cd0fb8c85e1547c3c60f95f5b2d5e1 – Ben

回答

1

通常,爲了保留GET參數,只需手動重寫它們即可。不應該有很多情況下必須這樣做很重要。

&page={{page}}&total={{total}} 

您可以將此抽象爲模板包含或自定義模板標記。

https://docs.djangoproject.com/en/1.11/howto/custom-template-tags/

此外,你可以創建一個字符串過濾器,需要網址參數是一個字符串,以及要更改值的字典。過濾器可以解析params字符串,更新值,然後將字符串重新組合爲URL參數。

{{ request.get_full_path | update_param:'page=8' }}