2017-09-03 41 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' }}