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

时间:2017-11-19 14:33:57

标签: django django-rest-framework

我在views.py

中创建了一个api_root
@api_view(['GET'])
def api_root(request, format=None):
  return Response({
      'books': reverse('api_book_list'),
      'users': reverse('api_user_list')
})

我的rest_api.urls.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'),
]

我的项目root urls.py使用以下url-config链接到rest_api.urls.py:

url(r'^api/v1/', include('rest_api.urls', namespace='api')),

然而,当我访问/ 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.

但是我已经在urls.py中定义了模式名称,有没有人知道为什么Django仍然不会识别它?

1 个答案:

答案 0 :(得分:1)

您已将 namespace='api' 定义为根网址,因此您需要在网址名称前添加api,而正在撤消 < / p>

reverse('api:api_book_list')
reverse('api:api_user_list')
  

阅读官方文档:Reversing namespace urls