Реверс для 'api' не найден. 'api' не является допустимой функцией представления или именем шаблона с rest-framework - PullRequest
1 голос
/ 01 февраля 2020

У меня есть несколько API с django -rest-framework, моя маршрутизация выглядит следующим образом.

set /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 Ответ

1 голос
/ 01 февраля 2020

Маршрутизатор предоставляет аргумент 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-адресов. Таким образом, вам нужно указать, какой из них вы хотите использовать, добавив конкретный c суффикс -list или -detail. Первый из них даст вам URL-адрес действий list() и create(). И второе использование для retrieve() и update().

Так что в шаблоне это будет примерно так:

<a href="{% url 'genres-list' %}">api</a>
...