为什么 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')
我正在按如下方式配置我的 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')