未找到“api”的反向操作。“api”不是休息框架的有效视图函数或模式名称

whi*_*ear 3 python django django-rest-framework

我有一些 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'),
Run Code Online (Sandbox Code Playgroud)

现在我想在模板中使用这个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.
Run Code Online (Sandbox Code Playgroud)

nev*_*ner 6

Router 提供了basename用于反转 url 的参数。

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

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

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

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

<a href="{% url 'genres-list' %}">api</a>
Run Code Online (Sandbox Code Playgroud)