HttpResponseRedirect,反向不传递参数

时间:2016-06-04 20:00:49

标签: python django

在我的观点的一个定义中,我正在做这个

return HttpResponseRedirect(reverse('home'),{"fail":"true"})

然后视图中的目标接收定义执行此操作

def Validate(request):
    rslt = request.GET.get("fail", "False")  #--->fail is always false
    ....
    ....

在上面,变量fail始终是false。关于为什么我总是弄错的任何建议。为什么我的新参数没有被传递?

3 个答案:

答案 0 :(得分:1)

传递给args构造函数的kwargsHttpResponseRedirect

def __init__(self, redirect_to, *args, **kwargs):
    ...

未用于构建QueryDict(获取或发布)。您在此处初始化响应,而不是请求。正如doniyor已经声明的那样,你基本上必须手动将查询字符串附加到reverse()返回的路径:

return HttpResponseRedirect('{to}?{query}'.format(
    to=reverse('home'),
    query=urllib.urlencode({"fail":"true"})
))

这与django无关,而是一般的http重定向。您只能将请求重定向到某个位置(您可以向其添加查询字符串),但您无法篡改请求本身,例如添加POST数据或设置标题。

答案 1 :(得分:0)

它是因为你要求来自fail的{​​{1}},但你没有在GET中传递任何东西。

你需要:

GET

然后你可以像:

return HttpResponseRedirect('%s?fail=%s' % (reverse('home'), True))
不要滥用布尔人! ;)

答案 2 :(得分:0)

你需要在反向函数中给出第二个参数...作为de arguments ...这对我很有用!!!

    return reverse('home', args='true')