Django:带有kwargs的HttpResponseRedirect的NoReverseMatch

时间:2014-02-04 12:31:14

标签: python django

我收到以下错误:

  

/ updatebooking /

的NoReverseMatch      

'common.views.myview'的反转   使用参数'()'和关键字参数'{'msg':“hello”,'case':   '成功'}'找不到。

公共/ views.py

def view1(request):
    ...
    return HttpResponseRedirect(reverse('common.views.view2', kwargs= {"msg":"hello","case":"success"}))

def view2(request,msg=None,case=None):
    ...

urls.py

url(r'^test1/$','common.views.view1',name='my_view1'), 
url(r'^test2/$','common.views.view2',name='my_view2'),

此行reverse('common.views.view2', kwargs= {"msg":"hello","case":"success"})正在抛出错误。

只有在我使用kwargs时才会出现错误。以下代码有效:

return HttpResponseRedirect(reverse('my_view2'))
return HttpResponseRedirect(reverse('common.views.view2'))

请帮我解决这个问题。

2 个答案:

答案 0 :(得分:4)

当您使用reverse kwargs参数时,django会尝试查找参数化的网址路径。在您的示例中,匹配路由类似于

url(r'^test2/(?P<msg>\w+)/(?P<case>\w+)$','common.views.view2',name='my_view2')

有关详细信息,请参阅reverseURLDispatcher文档。不幸的是,URLDispatcher和反向手册都对这个特殊功能有点神秘。

答案 1 :(得分:1)

您的网址没有msgcase参数,这就是Django无法找到的原因。请参阅此示例中的参数中心slug

url(r'^(?P<slug>[^/]+)/$', 'test.views.detail', name="test-detail")

我相信您正在尝试将消息/通知传递给另一个视图。如果是这种情况,您应该检查the messages framework