繁体   English   中英

带有未传递参数的HttpResponseRedirect

[英]HttpResponseRedirect with reverse not passing parameters

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

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

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

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

在上面的变量中,fail总是false 关于为什么我总是虚假的任何建议。 为什么我的新参数没有通过?

argskwargs传递给HttpResponseRedirect构造函数

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

不用于构造QueryDict (获取或发布)。 您正在此处初始化响应,而不是请求。 正如doniyor已经指出的那样,您基本上必须手动将querystring附加到reverse()返回的路径上:

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

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

这是因为您要从GET请求fail ,但没有在GET中传递任何内容。

你需要:

return HttpResponseRedirect('%s?fail=%s' % (reverse('home'), True))

那么您可以像这样捕获它:

request.GET.get("fail", False)

不要误用布尔值! ;)

您需要在反向函数中给第二个参数...作为de arguments ...这对我来说很好!!!

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM