可以在重定向中添加GET变量吗? (无需修改我的urls.py)
如果我redirect('url-name', x)
我得到HttpResponseRedirect('/my_long_url/%s/', x)
我没有使用HttpResponseRedirect('/my_long_url/%s/?q=something', x)
投诉,只是想知道......
答案 0 :(得分:101)
由于重定向只返回一个HttpResponseRedirect
对象,您可以改变它:
response = redirect('url-name', x)
response['Location'] += '?your=querystring'
return response
答案 1 :(得分: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'
答案 2 :(得分:1)
我们可以从Django导入urlencode。
from django.utils.http import urlencode
get_args_str = urlencode({'q': 'something'})
或者我们可以从启动请求中使用未解析的get parameters字符串
get_args_str = request.META['QUERY_STRING']
HttpResponseRedirect('%s?%s' % (url, get_args_str))
答案 3 :(得分:1)
我认为值得一提的是Django的RedirectView
类具有内置的类属性query_string
,可以将其覆盖或传递给as_view
。如果设置为True
,则query_string
将在重定向中保留查询字符串。例如,您可以将以下内容放在urls.py
中:
path('example-redirect/',
RedirectView.as_view(url='https://example.com', query_string=True),
name='example_redirect')