Django rest Framework:即使定义了模式名称,也不会出现NoReverseMatch错误 [英] Django rest Framework: NoReverseMatch error even when pattern name has been defined

查看:93
本文介绍了Django rest Framework:即使定义了模式名称,也不会出现NoReverseMatch错误的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我已经在views.py中创建了一个api_root。

I've created a api_root in my views.py

@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

Which is referred to by my 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'),
]

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

My project root urls.py links to the rest_api.urls.py with the following url-config:

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

但是,当我访问/ api / v1 /页面I出现以下错误:

Yet, when I visit the /api/v1/ page I get the following error:

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吗还是不会认出它?

But I've defined the pattern name in my urls.py, does anyone have a idea why Django still wont recognize it?

推荐答案

您已定义 namespace ='api' 到根URL,因此您需要在反转 时在URL名称前附加 api p>

You have defined namespace='api' to root url so you need append api before url name while reversing

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




阅读官方文档:反转名称空间网址

这篇关于Django rest Framework:即使定义了模式名称,也不会出现NoReverseMatch错误的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆