首页 > 解决方案 > 未找到“api”的反向。'api' 不是带有休息框架的有效视图函数或模式名称

问题描述

我有一些带有 django-rest-framework 的 api,我的路由如下所示。

设置/api/genres/api

from rest_framework import routers
from django.conf.urls import url
from django.conf.urls import include

router = routers.DefaultRouter()
router.register(r'genres', GenreViewSet)

urlpatterns = [
    url(r'^api/',include(router.urls), name='api'),
    path('', views.index, name='index'),

现在我想在模板中使用这个 url,所以我尝试了两种模式,但都显示错误。

我应该如何制作api的链接?

<a href="{% url 'api' %}">api</a>
Reverse for 'api' not found. 'api' is not a valid view function or pattern name.

<a href="{% url 'genres' %}">genre</a>
Reverse for 'genres' not found. 'genres' is not a valid view function or pattern name.

标签: pythondjangodjango-rest-framework

解决方案


路由器提供了basename用于反转 url 的参数。

router = routers.DefaultRouter()
router.register(r'genres', GenreViewSet, basename='genres')

urlpatterns = [
    url(r'^api/',include(router.urls)),
    path('', views.index, name='index'),

请注意,DRF 的视图集有多个 url。因此,您需要通过添加特定的后缀-list-detail. list()第一个将为您提供视图集和create()操作的 url 。第二次使用 forretrieve()update()

所以在模板中它会是这样的:

<a href="{% url 'genres-list' %}">api</a>

推荐阅读