使用django.shortcuts.redirect添加request.GET变量

问题描述 投票:46回答:3

可以在重定向中添加GET变量吗? (无需修改我的urls.py)

如果我做redirect('url-name', x)

我得到HttpResponseRedirect('/my_long_url/%s/', x)

我没有抱怨使用HttpResponseRedirect('/my_long_url/%s/?q=something', x),但只是想知道......

django redirect django-urls django-views
3个回答
42
投票

可以在重定向中添加GET变量吗? (无需修改我的urls.py)

如果不修改urls.py,我不知道有什么方法可以做到这一点。

我没有抱怨使用HttpResponseRedirect('/ my_long_url /%s /?q = something',x)代替,但只是想知道......

您可能希望编写一个瘦包装器以使其更容易。说,custom_redirect

def custom_redirect(url_name, *args, **kwargs):
    from django.core.urlresolvers import reverse 
    import urllib
    url = reverse(url_name, args = args)
    params = urllib.urlencode(kwargs)
    return HttpResponseRedirect(url + "?%s" % params)

然后可以从您的视图中调用它。对于例如

return custom_redirect('url-name', x, q = 'something')
# Should redirect to '/my_long_url/x/?q=something'

101
投票

由于重定向只返回一个HttpResponseRedirect对象,你可以改变它:

response = redirect('url-name', x)
response['Location'] += '?your=querystring'
return response

1
投票

我们可以从django导入urlencode。

from django.utils.http import urlencode

get_args_str = urlencode({'q': 'something'})

或者我们可以在启动请求中使用未解析的get参数字符串

get_args_str = request.META['QUERY_STRING']

HttpResponseRedirect('%s?%s' % (url, get_args_str))
© www.soinside.com 2019 - 2024. All rights reserved.