DRF - 如何在 api_root 中反转基于类的视图

Has*_*tax 1 django django-views django-rest-framework

在 Django REST Framework 中,我尝试将 API 根添加到具有基于类的视图的views.py。

错误:

$ http http://127.0.0.1:8000/api/

Error - django.urls.exceptions.NoReverseMatch: Reverse for 'SnippetListView' not found. 'SnippetList' is not a valid view function or pattern name.
Run Code Online (Sandbox Code Playgroud)

后端/views.py

from backend.models import *
from backend.serializers import *

from rest_framework import generics
from rest_framework.decorators import api_view
from rest_framework.response import Response
from rest_framework.reverse import reverse



@api_view(['GET'])
def api_root(request, format=None):
    return Response({
        'snippets': reverse('SnippetList')
        # 'snippets': reverse('SnippetListView')
        # 'snippets': reverse('snippet-list')
        # 'snippets': reverse('snippet_list')
    })


class SnippetList(generics.ListCreateAPIView):
    queryset = Snippet.objects.all()
    serializer_class = SnippetSerializer
Run Code Online (Sandbox Code Playgroud)

后端/urls.py

from backend import views
from django.urls import path, include
from rest_framework.urlpatterns import format_suffix_patterns

urlpatterns = [
    path('', views.api_root),
    path('snippets/', views.SnippetList.as_view()),
    path('snippets/<int:pk>/', views.SnippetDetail.as_view()),
]
Run Code Online (Sandbox Code Playgroud)

文件:

https://www.django-rest-framework.org/tutorial/5-relationships-and-hyperlinked-apis/#creating-an-endpoint-for-the-highlighted-snippets

Has*_*tax 9

您需要命名视图 url 才能使用反向。

#urls.py
path('snippets/', views.SnippetList.as_view(), name='snippet-list'),

#views.py
'snippets': reverse('snippet-list', request=request, format=format)
Run Code Online (Sandbox Code Playgroud)

本教程最初并未为基于类的视图的 URL 命名。