尝试重定向到另一个视图时获取NoReverseMatch

时间:2013-07-03 15:14:50

标签: django

获取错误Reverse for 'view_part' with arguments '()' and keyword arguments '{'part_id': u'54'}' not found

URLS.PY

url(r'^(\d+)/(\d+)/convert/$', 'store.views.changetool', name = "convert"),
url(r'^(\d+)/view_part/$','store.views.view_part',name="view_part"),

VIEWS.PY(changetool

def changetool (request, id, unipart=None):
    part = Part.objects.get(id=id)
    file = str (part.content)
    newfile = FormatConversion.ConvertToNew(file)
    return redirect('view_part', part_id = unipart)

VIEWS.PY(view_part

def view_part(request, part_id, newfile = None):
...

1 个答案:

答案 0 :(得分:4)

return redirect('view_part', part_id = unipart)必须是return redirect('view_part', unipart)

请参阅here

  

通过传递视图的名称和可选的一些位置或关键字参数;使用reverse()方法将反向解析URL:

修改

确定。 在reverse()函数中,您必须在'args'kwarg中传递位置参数(reverse('some_ulr_name', args=[1945]),在'kwargs'kwarg中传递关键字参数(reverse('some_url_view', kwargs={'year': 1945})),因为您可以使用其他参数你不想发送给网址的kwargs。

但是,当你使用redirec()时,它会将所有的args和kwargs发送给反向方法。

一些例子:

redirect("view_part", unipart) 
# Will do a 
HttpResponseRedirect( reverse("view_part", args=[unipart]) )

#and a 
redirect("view_part", part_id=unipart)
#will do a
HttpResponseRedirect( reverse("view_part", kwargs={'part_id':unipart}) )

最后一个选项失败,因为您的网址没有名称,请参阅here以向网址栏目添加名称