Не получает url из реверса с помощью DRF DefaultRouter
Я пытаюсь получить урлы для написания тестов с помощью обратной функции. Но я получаю ошибку
Ошибки :-. Реверс для 'notes' не найден. 'notes' не является допустимой функцией представления или именем шаблона.
файлurls.py
from django.contrib import admin
from django.urls import path, include
from core import views
from rest_framework.routers import DefaultRouter
router = DefaultRouter()
router.register("notes",views.NoteModelViewSet)
urlpatterns = [
path("",include(router.urls)),
]
и файл test.py
def test_get_all_notes_path(self):
url = reverse('notes')
response = self.client.get(url)
self.assertEqual(response.status_code, 200)
Я получаю ошибку для строки url = reverse('notes')
, которую я указал выше. Моя модель и маршруты работают нормально. Только я не получаю url в обратной функции.
независимо от того, задали ли вы basename или нет, вы можете сделать обратное с помощью url-path-or-basename
-list
url = reverse('notes-list')
установите basename для вашего маршрутизатора в качестве опции
router.register("notes",views.NoteModelViewSet, basename='notes')
поскольку basename будет создавать маршруты с именем по умолчанию
The example above would generate the following URL patterns:
URL pattern: ^notes/$ Name: 'notes-list'
URL pattern: ^notes/{pk}/$ Name: 'notes-detail'
Просто добавлю к ответу, что утилита, которую я нашел очень полезной при работе с reverse()
- особенно при использовании вложенных маршрутизаторов сторонних производителей - это drf-extensions.
После установки я использую их команду show_urls
следующим образом python manage.py show_urls
, в которой перечислены все урлы проекта с соответствующими им именами и параметрами.
Это помогло мне использовать reverse()
в самых сложных вложенных ситуациях.