如何反转名称中带有连字符的URL



我有一个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/)

DRF使用basename进行反向视图集URL。默认情况下,它是基于视图集中提供的查询集进行评估的,但可以通过直接向路由器提供自定义值来覆盖它:

router.register(r'complex-name', views.ComplexNameModelViewSet, basename='complex-name')
COMPLEX_MODEL_NAME_URL = reverse('something:complex-name-list')

最新更新