【问题标题】:Django Remove %2520 Request.GET and Update Search QueryDjango 删除 %2520 Request.GET 并更新搜索查询
【发布时间】:2016-03-05 20:06:57
【问题描述】:

我的搜索表单没有返回任何结果或给出 404,因为某些链接的查询在 URL 中包含“%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)

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

【问题讨论】:

    标签: python django


    【解决方案1】:

    假设您的 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))

    这完全取决于您要如何过滤结果,因此要删除空格只需执行.split()

    【讨论】:

    • 我了解这是怎么回事,但这不是我的问题的解决方案,因为 Google bot 错误地索引了这些链接并给了我 404 错误。这是我试图从 url 查询中删除空格并返回正确搜索结果的唯一原因。
    • 所以当你删除这些行时,你得到的只是一个 %20 这是一个空格,如果我是正确的,你想删除它
    • 正确,我需要给搜索表单提供一个没有%2520%20 的干净短语,否则搜索页面将不会返回任何结果。
    • 感谢您的更新。虽然您的解决方案可能有用,但恐怕我无法使用它,因为我的搜索由 Haystack 提供支持,因此,我真正需要的只是一个没有任何特殊字符的干净关键字。这是我尝试更新 url 关键字编码的唯一原因。
    猜你喜欢
    • 1970-01-01
    • 2014-08-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-08-12
    • 2021-04-30
    相关资源
    最近更新 更多