Как поменять URL с дефисами в названии? - PullRequest
0 голосов
/ 19 февраля 2020

У меня есть приложение Django, с файлом, подобным следующему

app_something/url.py:

from django.urls import include, path, re_path
from rest_framework import routers
from . import views

slashless_router = routers.DefaultRouter(trailing_slash=True)
router = routers.DefaultRouter()

router.register(r'complex-name', views.ComplexNameModelViewSet)
router.register(r'simple', views.SimpleModelViewSet)

app_name='something'

urlpatterns = [
    path('api/', include(router.urls)),
]

Работает отлично. Или это то, что я привык думать. Теперь я пытаюсь добавить тесты (да, мои плохие, они должны быть там первыми)

НО, теперь в моем test_complex_name_api.py:

from django.urls import reverse

from rest_framework import status

from app_something import models, serializers

SIMPLE_MODEL_NAME_URL = reverse('something:simple-list')
COMPLEX_MODEL_NAME_URL = reverse('something:complex-name-list')

# ...
# My Tests

Но, когда я запускаю свой Тесты Я получил следующую ошибку:

django.urls.exceptions.NoReverseMatch: Reverse for 'complex-name-list' not found. 'complex-name-list' is not a valid view function or pattern name.

SimpleModel работает довольно круто. Итак, я думаю, что это связано с именем. Но я не нашел, какой шаблон имени использовать? Должен ли я переименовать URL-адрес или я все еще могу использовать его таким образом, и мне не хватает только той части документов, в которой говорится об этом? (Читаю: https://www.django-rest-framework.org/api-guide/routers/)

1 Ответ

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

DRF с использованием basename для обратных URL-адресов набора. По умолчанию он оценивается на основе набора запросов, предоставленного в наборе представлений, но может переопределить его, предоставив настраиваемое значение напрямую маршрутизатору:

router.register(r'complex-name', views.ComplexNameModelViewSet, basename='complex-name')

COMPLEX_MODEL_NAME_URL = reverse('something:complex-name-list')
...