我有一个没有返回任何结果的搜索表单或者给出了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)
到目前为止没有运气。我错过了什么?
答案 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
如何进行过滤然后根据它进行工作,例如,形成删除空格的视图的基本搜索就像这样:
将搜索查询拆分为一系列关键字:
search = self.request.GET.get('q')
kw_list = search.split()
循环搜索关键字,同时筛选出正确的结果,例如:
Poll.objects.get(Q(title__icontains=keyword) for keyword in kw_list))
这一切都取决于您希望如何过滤结果,因此要删除空格只需执行.split()