Django Redirect vs Revese错误

时间:2015-07-28 10:43:38

标签: python django django-views

查看文档似乎重定向是创建内部反向的HTTP请求的快捷方式。我有以下工作代码:

return HttpResponseRedirect(reverse('post-detail', args=(self.kwargs['pk'],)))

我希望同样的事情可以作为重定向,参数传递给反向:

return redirect('post-detail', args=(self.kwargs['pk'],))

虽然在使用重定向时,我得到了与URL不匹配的异常。我错过了什么?

url(r'^post/(?P<pk>[\d]+)/$', views.PostDetailView.as_view(), name="post-detail"),

使用重定向时出错:

  

反向&#39;详细信息&#39;参数&#39;()&#39;和关键字参数   &#39; {&#39; args&#39;:(u&#39; 5905064635924480&#39;,)}&#39;未找到。尝试过1种模式:   [&#39;交/(ΔP[\ d] +)/ $&#39;]

1 个答案:

答案 0 :(得分:1)

redirect的签名与reverse不同,正如您从错误中看到的那样,这表明它使用的是*args, **kwargs,而不是使用名为args的关键字参数kwargs

(另见文档:https://docs.djangoproject.com/en/1.8/topics/http/shortcuts/#redirect

所以你想要:

return redirect('post-detail', self.kwargs['pk'])

return redirect('post-detail', pk=self.kwargs['pk'])