我可以在同一个应用中使用不同的根网址吗?

时间:2018-04-26 07:52:58

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

在我的DRF项目中,我有2个应用,UsersProductsProducts有2个模型:CategoryProduct。我的root 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))
]

和products.urls

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

我希望我的API方案类似于

/api/users/
/api/products/
/api/categories/

现在,这适用于前两个URL,但显然不是第三个,即如果我要添加

path('categories', views.CategoriesListCreateAPIView.as_view())

到我的products.urls,URL方案将是

/api/products/categories/

我的问题是,是否有某种方法可以实现/api/categories/目标而不将Category拆分为自己的应用程序?我觉得好像拥有自己的应用程序并且应该与Product在同一个应用程序中,这太微不足道了。显然,我想我可以直接在根URL conf中导入视图,但这并不像是一个干净的'解。我应该考虑为类别创建单独的应用程序吗?产品模型与Category具有外键关系,对我来说,感觉好像两个独立的应用程序只会使事情变得复杂。

2 个答案:

答案 0 :(得分:2)

首先,你需要认识到你有一些相互矛盾的要求;你想做一些不寻常的事情(在同一个应用程序中有两个独立的根路径),但你也想保持它"干净"。

我能想到的最干净的解决方案是在包含app urlconf时根本不使用前缀,而是像在api前缀中那样在文件中设置它。所以:

path('', include('products.urls'))

然后

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

urlpatterns = [
    path('categories', views.CategoriesListCreateAPIView.as_view()),
    path('products/', include(product_patterns)
]

答案 1 :(得分:2)

我最终选择了以下方法:我在应用程序中创建了一个URL模块,并在其中添加了两个<div class="col-xs-6"></div> ,而不是在urls.py应用中使用单个ProductsurlconfsCategory各占一个。

Product

然后我#product/urls/producturls.py urlpatterns = [ path('', views.ProductListCreateAPIView.as_view()) ] #product/urls/categoryurls.py urlpatterns = [ path('', views.CategoryListCreateAPIView.as_view()) ] 在我的根include()

urlconf

Screenshot