为什么 Django 反转 URL return app_name?

Why does Django Reverse URL return app_name?

我正在按如下方式配置我的 URL:

router = DefaultRouter()
router.register('personal', views.EventPersonalViewSet)
router.register('public', views.EventPublicViewSet)

app_name = 'event'

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

我希望像这样反转 URLs:

EVENT_PERSONAL_URL = reverse('event:personal-list')
EVENT_PUBLIC_URL = reverse('event:public-list')

但是,我只能像这样反转一个URL:

reverse('event:event-list')

运行manage.pyshow_urlsreturns如下配置:

/api/event/personal/ event.views.EventPersonalViewSet event:event-list

/api/event/personal./ event.views.EventPersonalViewSet event:event-list

/api/event/public/ event.views.EventPublicViewSet event:event-list

/api/event/public./ event.views.EventPublicViewSet event:event-list

为什么 reverse() 会引用 app_name 而不是指定的路径?

我想是因为你在router.register中没有提到basename。

你应该尝试像这样在 router.register 中添加基本名称

router.register(prefix='personal', views.EventPersonalViewSet, basename='personal')

现在,您将能够使用反向 url 通过使用 反向('event:personal-list')