python - 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' 不是有效的视图函数或模式名称。为什么它找不到视图名称?
解决方案
由于您在 中包含 an app_name
,urls.py
因此您需要使用应用名称指定视图名称,因此:
@api_view(['GET'])
def api_root(request, format=None):
return Response({
'boards': reverse('board:board-list', request=request, format=format) # board-list
})
推荐阅读
- html - 变换:scale3d(1, 0.1, 1); “.1”太宽
- javascript - 如果选择的新数据存在,如何从本地存储更新数据
- node.js - 从 CURL 到 Node 的 API 调用
- java - Spring Web 应用程序的 PDF 查看器
- swift - osx:在 NSWindowController 和 NSViewController 之间进行委托
- html - 如何在 Vue.js 的选择框中设置默认值?
- python - 将 set() 结果输出值打印到换行符中
- python - 以增量顺序在熊猫中编号并且不考虑列?
- ruby-on-rails - 无法使用 heroku 在生产端验证 CSRF 令牌的真实性
- http - Google Kubernetes Engine 拒绝流量