找不到“api”的反向路径。'api'不是有效的视图函数或模式名称,使用rest-framework。

3

我有几个与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.
1个回答

6

路由器提供了参数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的viewset有多个URL。因此,您需要通过添加特定后缀“-list”或“-detail”来指定要使用哪个URL。第一个将为您提供视图集“list()”和“create()”操作的URL。而第二个则用于retrieve()update()
所以在模板中应该是这样的:
<a href="{% url 'genres-list' %}">api</a>

1
非常感谢。这是一个很好的建议,教我们如何使用basename - whitebear

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接