首页 > 解决方案 > DRF 反向找不到视图名称

问题描述

我正在使用 django rest 框架 api_root。即使我命名它也找不到视图。

# board/urls.py
from django.urls import path
from rest_framework.urlpatterns import format_suffix_patterns
from .views import BoardList, BoardDetail, api_root

app_name = 'board'
urlpatterns = [
    path('boards/', BoardList.as_view(), name='board-list'), # board-list
    path('boards/<int:pk>', BoardDetail.as_view(), name='board-detail'),
    path('', api_root),
]
urlpatterns = format_suffix_patterns(urlpatterns)

# board/views.py
from django.contrib.auth.models import User
from django.shortcuts import render
from rest_framework import generics, permissions, serializers
from rest_framework.decorators import api_view
from rest_framework.response import Response
from rest_framework.reverse import reverse

from .models import Board
from .serializers import BoardSerializer
from .permissions import IsAuthorOrReadOnly

@api_view(['GET'])
def api_root(request, format=None):
    return Response({
        'boards': reverse('board-list', request=request, format=format) # board-list
    })

class BoardList(generics.ListCreateAPIView):
    queryset = Board.objects.all()
    serializer_class = BoardSerializer
    permission_classes = [permissions.IsAuthenticatedOrReadOnly]

    def perform_create(self, serializer):
        serializer.save(author=self.request.user)

它抛出错误,

未找到“板列表”的反向。'board-list' 不是有效的视图函数或模式名称。为什么它找不到视图名称?

标签: pythondjangodjango-rest-framework

解决方案


由于您在 中包含 an app_nameurls.py因此您需要使用应用名称指定视图名称,因此:

@api_view(['GET'])
def api_root(request, format=None):
    return Response({
        'boards': reverse('board:board-list', request=request, format=format) # board-list
    })

推荐阅读