我可以在同一个应用程序中拥有不同的根 URL 吗?

Aam*_*han 2 django django-urls django-rest-framework

在我的 DRF 项目中,我有 2 个应用程序,Users并且Products. Products有 2 个型号:CategoryProduct。我的根 URL conf 看起来像这样

api_urls = [
    path('users/', include('users.urls')),
    path('products/', include('products.urls'))
]

urlpatterns = [
    path('admin/', admin.site.urls),
    path('api/', include(api_urls))
]
Run Code Online (Sandbox Code Playgroud)

和 products.urls

urlpatterns = [
  path('', views.ProductListCreateAPIView.as_view())
]
Run Code Online (Sandbox Code Playgroud)

我希望我的 API 方案是这样的

/api/users/
/api/products/
/api/categories/
Run Code Online (Sandbox Code Playgroud)

现在,这对于前两个 URL 来说效果很好,但显然不适用于第三个,即如果我要添加

path('categories', views.CategoriesListCreateAPIView.as_view())
Run Code Online (Sandbox Code Playgroud)

对于我的 products.urls,URL 方案将是

/api/products/categories/
Run Code Online (Sandbox Code Playgroud)

我的问题是,有没有办法在/api/categories/不分裂Category成自己的应用程序的情况下实现目标?我觉得它太微不足道了,不足以保证拥有自己的应用程序,并且应该与Product. 显然,我想我可以直接在根 URL conf 中导入视图,但这感觉不像是一个“干净”的解决方案。我应该考虑为类别创建一个单独的应用程序吗?产品模型与类别有外键关系,对我来说,感觉好像两个独立的应用程序只会让事情变得复杂。

Aam*_*han 5

我最终选择了以下方法:我没有在应用程序urls.py中使用单个Products模块,而是在应用程序内创建了一个 URL 模块,并urlconfs在其中添加了两个模块,每个模块分别对应CategoryProduct

#product/urls/producturls.py

urlpatterns = [
  path('', views.ProductListCreateAPIView.as_view())
]

#product/urls/categoryurls.py

urlpatterns = [
  path('', views.CategoryListCreateAPIView.as_view())
]
Run Code Online (Sandbox Code Playgroud)

然后我include()都在我的根urlconf

api_urls = [
    path('users/', include('users.urls')),
    path('products/', include('products.urls.producturls')),
    path('categories/', include('products.urls.categoryurls'))
]

urlpatterns = [
    path('admin/', admin.site.urls),
    path('api/', include(api_urls))
]
Run Code Online (Sandbox Code Playgroud)

截屏