Обратный DRF не может найти имя представления - PullRequest
1 голос
/ 16 марта 2020

Я работаю с django остальные рамки 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' не найден. 'board-list' не является допустимой функцией просмотра или именем шаблона. Почему он не может найти имя представления?

1 Ответ

1 голос
/ 16 марта 2020

Поскольку вы включили app_name в urls.py, вам необходимо указать имя представления вместе с именем приложения, поэтому:

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