【问题标题】:Django rest Framework: NoReverseMatch error even when pattern name has been definedDjango rest Framework:即使已定义模式名称,也会出现 NoReverseMatch 错误
【发布时间】:2017-11-19 14:33:57
【问题描述】:

我在 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'),
]

我的项目根 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 仍然无法识别它吗?

【问题讨论】:

    标签: django django-rest-framework


    【解决方案1】:

    您已将 namespace='api' 定义为根 url,因此您需要在 url 名称之前附加 api,同时 反转

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

    阅读官方文档:Reversing namespace urls

    【讨论】:

      猜你喜欢
      • 2020-08-14
      • 2014-06-22
      • 2018-10-01
      • 1970-01-01
      • 1970-01-01
      • 2020-02-14
      • 1970-01-01
      • 2015-03-17
      • 1970-01-01
      相关资源
      最近更新 更多