Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/mongodb/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Django 分页并获取参数_Django - Fatal编程技术网

Django 分页并获取参数

Django 分页并获取参数,django,Django,Django 1.11.4 我已经用method=“get”构建了一个搜索表单。 搜索表单有很多表单。 然后,该输入值作为url中的get参数传输 问题是如何获得分页。数据库包含数千个对象。分页是必要的 这是文档告诉我们的: 它建议如下: <a href="?page={{ contacts.previous_page_number }}">previous</a> page=2&page=3&page=2 我已经看过谷歌是如何处理这个问题的。在UR

Django 1.11.4

我已经用method=“get”构建了一个搜索表单。 搜索表单有很多表单。 然后,该输入值作为url中的get参数传输

问题是如何获得分页。数据库包含数千个对象。分页是必要的

这是文档告诉我们的:

它建议如下:

<a href="?page={{ contacts.previous_page_number }}">previous</a>
page=2&page=3&page=2
我已经看过谷歌是如何处理这个问题的。在URL的中间,它们有开始=30。并更改此参数:start=20,start=40。所以,他们交换


您能帮我理解如何在Django中保存获取参数和切换页面吗?当然,这是一种优雅的方式。

通常,要保留GET参数,只需手动重新编写即可。在很多情况下,必须这样做并不重要

&page={{page}}&total={{total}}
您可以将其抽象为模板包含或自定义模板标记

此外,还可以创建一个字符串过滤器,该过滤器将URL参数作为字符串以及要更改的值的dict。然后,过滤器可以解析参数字符串,更新值,然后将字符串重新组合回URL参数

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

通用的解决方案是定义一个“自定义模板标记”(一个函数),它保留完整的URL,但更新传递给它的GET参数

注册后,您可以在模板中使用此功能:

<a href="?{% query_transform page=contacts.previous_page_number %}">previous</a>
*感谢您提供的查询转换代码。这是python 3的一个版本

为什么此方法优于手动重建URL:


如果您后来决定在URL中需要其他参数:1。您不必更新模板中的所有链接。2.您不需要将重新构造URL所需的所有参数传递给模板。

这就是我所做的,而且更容易找到。尽管如此,许多人并不是更好的方法

param=“”
如果搜索程序:
qs=qs.filter(title\u icontains=search\u程序)
param=param+f“&search\u programs={search\u programs}”
如果级别:
qs=qs.filter(level\u icontains=level)
param=param+f“&level={level}”
如果类别:
qs=qs.filter(扇区图标=类别)
param=param+f“&category={category}”
paginator=paginator(qs,16)
页码=self.request.GET.GET('page')
页码=分页器。获取页码(页码)
上下文={
“页面对象”:页面对象,
“param”:param
}
返回渲染(self.request、self.template\u名称、上下文)
#在html中

我在Github上有一个模板标记,可用于此目的:
<a href="?{% query_transform page=contacts.previous_page_number %}">previous</a>
from django import template

register = template.Library()

@register.simple_tag(takes_context=True)
def query_transform(context, **kwargs):
    query = context['request'].GET.copy()
    for k, v in kwargs.items():
        query[k] = v
    return query.urlencode()