Django rest框架:即使已定义模式名,也会出现NoReverseMatch错误

Django rest框架:即使已定义模式名,也会出现NoReverseMatch错误,django,django-rest-framework,Django,Django Rest Framework,我已经在我的views.py中创建了一个api_根目录 @api_view(['GET']) def api_root(request, format=None): return Response({ 'books': reverse('api_book_list'), 'users': reverse('api_user_list') }) 我的rest_api.url.py引用了它 urlpatterns = [ url(r'', api_root), url(

我已经在我的views.py中创建了一个api_根目录

@api_view(['GET'])
def api_root(request, format=None):
  return Response({
      'books': reverse('api_book_list'),
      'users': reverse('api_user_list')
})
我的rest_api.url.py引用了它

urlpatterns = [
url(r'', api_root),
url(r'^books/$', BookList.as_view(), name='api_book_list'),
url(r'^books/(?P<pk>[0-9]+)/$', BookDetail.as_view(), name='book-detail'),


url(r'^users/$', UserList.as_view(), name='api_user_list'),
url(r'^users/(?P<pk>[0-9]+)/$', UserDetail.as_view(), name='user-detail'),
]
然而,当我访问/api/v1/页面时,我得到以下错误:

NoReverseMatch at /api/v1/
Reverse for 'api_book_list' not found. 'api_book_list' is not a valid view 
function or pattern name.
但是我已经在我的url.py中定义了模式名,有人知道为什么Django仍然无法识别它吗?

您已经在根url中定义了
namespace='api'
,所以您需要在url名之前追加
api
,然后进行反向操作

阅读官方文件:

NoReverseMatch at /api/v1/
Reverse for 'api_book_list' not found. 'api_book_list' is not a valid view 
function or pattern name.
reverse('api:api_book_list')
reverse('api:api_user_list')