反向工作,但重定向失败

时间:2013-02-05 20:35:43

标签: django

我已经阅读了5次这样的文档,我看不到这里丢失的内容。

我有一种情况,其中reverse()工作正常,但传递给redirect()的相同参数失败,并显示错误,指出地址无法解析。

reverse("app:submission_thanks", kwargs={ "data": survey.data.slug, "survey": survey.slug })

redirect("app:submission_thanks", kwargs={ "data": survey.data.slug, "survey": survey.slug })

我的网址是:

url(r'^(?P<data>[-\w]+)/(?P<survey>[-\w]+)/thanks/$',
         TemplateView.as_view(template_name="pasteur/submission_thanks.html"),
         name="submission_thanks",
    ),

2 个答案:

答案 0 :(得分:1)

重定向具有不同的方法签名:

redirect("app:submission_thanks", data=survey.data.slug, survey=survey.slug)

请参阅Django文档中的shortcut redirect examples


稍微深入了解代码:redirect(to, *args, **kwargs)调用resolve_url(to, *args, **kwargs)调用urlresolvers.reverse(to, args=args, kwargs=kwargs)。所以这绝对是正确的。

使用argskwargs快捷方式时,您无需将resolve_url打包在列表中,也可以将redirect打包在字典中。

答案 1 :(得分:0)

在重定向中传递反向网址:

return redirect(
    reverse("app:submission_thanks",
    kwargs={ "data": survey.data.slug, "survey": survey.slug }))