Django删除%2520 Request.GET并更新搜索查询

时间:2015-12-01 19:13:18

标签: python django

我有一个没有返回任何结果的搜索表单或者给出了404,因为某些链接的查询在网址中包含'%2520',例如:http://www.website.com/search/?q=some%2520keywords

我正在尝试从查询中删除'%2520'并同时更新request.GET值。

这就是我试图解决的问题:

q = { 'q': request.GET.get('q') }
urllib.urlencode(q)
request.GET = request.GET.copy()
request.GET.update(q)
form = form_class(request.GET, searchqueryset=searchqueryset, load_all=load_all)

到目前为止没有运气。我错过了什么?

1 个答案:

答案 0 :(得分:0)

假设您form_class正确查询了正确的结果:
您正在对网址进行双重编码,因此空格字符显示为%2520而不是%20,如此答案中所述https://stackoverflow.com/a/16085190/4724196

您只需要上面代码中的这一行:

form = form_class(request.GET, searchqueryset=searchqueryset, load_all=load_all)

你需要检查你的form_class如何进行过滤然后根据它进行工作,例如,形成删除空格的视图的基本搜索就像这样:

  1. 将搜索查询拆分为一系列关键字:

    search = self.request.GET.get('q')
    kw_list = search.split()

  2. 循环搜索关键字,同时筛选出正确的结果,例如:

    Poll.objects.get(Q(title__icontains=keyword) for keyword in kw_list))

  3. 这一切都取决于您希望如何过滤结果,因此要删除空格只需执行.split()