【问题标题】:Router not displaying correct URL in Django RestFramework?路由器没有在 Django Rest Framework 中显示正确的 URL?
【发布时间】:2020-08-07 21:12:02
【问题描述】:

这就是我定义应用程序的 urls.py 文件的方式


router = DefaultRouter()
router.register('hello-viewset', views.HelloViewSet, base_name='hello-viewset')
router.register('profiles', views.UserProfileViewSet)
router.register('schema', views.SchemaViewSet)
router.register('creddefination', views.CredDefViewSet)
router.register('overalltable', views.OverallViewSet)



urlpatterns = [

    path('', include(router.urls)),
]

项目的urls.py:

urlpatterns = [
    path('admin/', admin.site.urls),
    path('api/', include('DIAPI.urls')),

]

我没有得到正确的 creddefination 地址。但是当我手动转到http://127.0.0.1:7000/api/creddefination/ 时,它正在工作。它只是显示不正确。这可能是什么原因

【问题讨论】:

  • “显示不正确”是什么意思?追溯 ?空列表?结果包含意外的字段/值?
  • 正如您在所附图片中看到的,在凭据定义中它显示不同的地址。当我注释掉整体表的部分时,它在 UI 中正确显示。
  • 我的错,我没有正确理解它。

标签: django django-rest-framework django-views django-urls


【解决方案1】:

我猜views.CredDefViewSetviews.OverallViewSet 使用的是同一个型号。

如果是这样,那么默认的registerbasename 将以该模型命名,并在调用Django 的reverse url 构造时用作名称。由于 API Root 视图将尝试解析具有相同名称的两个视图,因此会导致相同的 url。

解决方法是将basename 显式添加到其中一个视图:

router.register('creddefination', views.CredDefViewSet, basename='creddeef')

【讨论】:

  • 是的,它们都使用相同的模型。我会在早上试试这个。
猜你喜欢
  • 2020-10-07
  • 2016-05-30
  • 2017-04-19
  • 2015-09-26
  • 2018-07-04
  • 1970-01-01
  • 2015-11-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多