如何使用查询字符串django重定向到URL

Saa*_*lah 13 python django

AoA,如何使用参数(如果我有视图)转到特定的URL

def search(request):
Run Code Online (Sandbox Code Playgroud)

并在urls.py

^search/$ 
Run Code Online (Sandbox Code Playgroud)

而我需要做的是重定向 search/?item=4

c = {}
render_to_response("search.html",c) 
Run Code Online (Sandbox Code Playgroud)

工作正常,但是

render_to_response("search.html/?item=" + itemID, c )
Run Code Online (Sandbox Code Playgroud)

它说找不到模板(我知道没有像search.html /?item =这样的模板)但是如何传递参数或使用查询字符串进行重定向?

Saa*_*lah 23

答案很简单.使用反向和传递url的名称可以使用查询字符串重定向到url

urls.py

url(r'^search/$', views.search, name='search_view')
Run Code Online (Sandbox Code Playgroud)

views.py

from django.shortcuts import redirect, reverse

# in method
return redirect(reverse('search_view') + '?item=4')
Run Code Online (Sandbox Code Playgroud)

  • 这可能不应该是公认的答案。您应该使用“urlencode”,如[此答案](/sf/answers/2931306871/) (2认同)

Pab*_*noz 7

我知道这个问题有点旧,但有人会在搜索重定向时遇到查询字符串,所以这是我的解决方案:

import urllib
from django.shortcuts import redirect

def redirect_params(url, params=None):
    response = redirect(url)
    if params:
        query_string = urllib.urlencode(params)
        response['Location'] += '?' + query_string
    return response

def your_view(request):
    your_params = {
        'item': 4
    }
    return redirect_params('search_view', your_params)
Run Code Online (Sandbox Code Playgroud)


Mat*_*kel 6

如果你已经有一个请求(带有包含一些参数的 GET),并且你想重定向到具有相同 args、kwargs 和参数的不同视图,我们可以使用 QueryDict 对象对自身进行 url 编码:

def view(request, *args, **kwargs):
    return redirect(
        reverse('your:view:path', args=args, kwargs=kwargs) + 
        '?' + request.GET.urlencode()
    )
Run Code Online (Sandbox Code Playgroud)