如何在Django rest框架路由器中修复此NoReverseMatch异常?

时间:2019-01-31 17:42:16

标签: django routes django-rest-framework django-views django-rest-viewsets

我正在研究这个Django项目,但我无法使用reverse()解析URL。

我试图从在线文档中了解这个概念,但我无法成功。

我在自己的视图中使用ModelViewSet。py

在我的tests.py

POSTS_URL = reverse('posts:posts-list')

这是我的帖子(即应用)的urls.py

app_name = 'posts'


router = DefaultRouter()
router.register('', PostsViewSet)


urlpatterns = [
path('', include(router.urls))
]

这是我的urls.py根目录

urlpatterns = [
path('admin/', admin.site.urls),
path('api/posts/', include('posts.urls')),
path('docs/', include_docs_urls(title='My API title')),
]

这是我得到的错误

django.urls.exceptions.NoReverseMatch: Reverse for 'posts-list' not found. 'posts-list' is not a valid view function or patternname.

也有人可以建议一个合适的地方,以正确理解reverse()和路由器如何协同工作。.

1 个答案:

答案 0 :(得分:0)

在您的urls.py app_name中似乎没有被使用,默认情况下the router uses the model's name(单数),因此reverse("post-list")应该可以工作。

如果要对URL进行命名空间,则应该执行path('api/posts/', include('posts.urls', 'posts'))之类的操作,然后reverse('posts:post-list')应该起作用。