python - 未找到“api”的反向。'api' 不是带有休息框架的有效视图函数或模式名称
问题描述
我有一些带有 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'),
现在我想在模板中使用这个 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.
解决方案
路由器提供了basename
用于反转 url 的参数。
router = routers.DefaultRouter()
router.register(r'genres', GenreViewSet, basename='genres')
urlpatterns = [
url(r'^api/',include(router.urls)),
path('', views.index, name='index'),
请注意,DRF 的视图集有多个 url。因此,您需要通过添加特定的后缀-list
或-detail
. list()
第一个将为您提供视图集和create()
操作的 url 。第二次使用 forretrieve()
和update()
。
所以在模板中它会是这样的:
<a href="{% url 'genres-list' %}">api</a>
推荐阅读
- linux - 无法在“.vscode”文件夹({0})中创建“launch.json”文件
- webpack - 这两个 output.path webpack 配置有什么区别?
- java - 获得所需的结果集值,该值可能需要数小时才能显示在表格中
- javascript - 是否可以将元素的 textContent 分配为 JS 中的 HTML 代码?
- html - 在段落中完美对齐引导标记
- postgresql - Kubernetes minikube 中的 postgres 数据保留
- c# - Html.ValidationSummary 未填充自定义错误 ASP.NET MVC Razor 页面
- python - TSP 算法:初始化种群
- c - 关于 sizeof() 和分配的内存
- c# - 挣扎于方法和类的交互方式