NoReverseMatch,但它存在并被发现

NoReverseMatch, but it exist and was found

urls.py

url(r'^hr/checktask/(?P<pk>\d+[-]\w)/$', core_views.CheckTask, name='checktask_hr'),
url(r'^admin/checktask/(?P<pk>\d+[-]\w)/$', core_views.CheckTask, name='checktask_admin'),
url(r'^finance/checktask/(?P<pk>\d+[-]\w)/$', core_views.CheckTask, name='checktask_finance'),
url(r'^manager/checktask/(?P<pk>\d+[-]\w)/$', core_views.CheckTask, name='checktask_manager'),

本质上,我有 4 个独立的 url,但它们都调用相同的函数。每个都有不同的名字。

在我的代码中,根据我的 url,我将调用其中一种模式

pk = 42387790148475610;
callingView = request.META.get('PATH_INFO').split("/")[1]
return HttpResponseRedirect(reverse('checktask_' + callingView, kwargs={'pk': pk}))

但不知何故,我得到了一个 NoReverseMatch 错误,尽管它实际上指向正确的 url 模式(在这种情况下为 hr)

Reverse for 'checktask_hr' with keyword arguments '{'pk': '42387790148475610'}' not found. 1 pattern(s) tried: ['hr/checktask/(?P<pk>\d+[-]\w)/$']

我哪里错了?

您的 pk 参数与 URL 中 pk 的模式不匹配。您的模式假定 pk 中某处有破折号 (-),但您提供的值中有 none。

试试这个

url(r'^hr/checktask/(?P<pk>\d+)/$',core_views.CheckTask, name='checktask_hr'),
....

读这个https://docs.djangoproject.com/en/1.8/topics/http/urls/#id4