目前,我正在处理的项目有如下API:
api/
visitors/ # Endpoint returning list of visitors
visitor-rates/ # Endpoint returning visitors per time
gift-shop-orders/ # Endpoint returning purchases at the gift shop
order-rates/ # Endpoint returning purchases per time
我想要做的是将访客和礼品店端点分组到他们自己的子标题下。例如:
api/
visits/
visitors/
rates/
gift-shop/
orders/
rates/
请注意,visits
和gift-shop
只能列出相应子标题下可用的网址。因此,对/api/visits
的GET请求应返回:
{
"visitors": "/api/visits/visitors",
"rates": "/api/visits/rates"
}
换句话说,我希望/api/visits/
和/api/gift-shop/
具有与Django用于显示API根目录中可用端点的默认路由器视图相同的行为({ {1}})。
我尝试过简单地将网址嵌套在一起。因此,假设我已经为访问者端点和商店端点定义了路由器。我试过了:
/api/
这使得api_patterns = [
url(r'^visits/', include(visitor_router.urls)),
url(r'^gift-shop/', include(shop_router.urls)),
]
urlpatterns = [
url(r'^api/', include(api_patterns)),
]
和/api/visits/
的请求正确响应。但是,如果我转到/api/gift-shop/
,则不会找到指向/api/
或/api/visits
的链接。
这让我相信我需要自己嵌套路由器,而不仅仅是URL。但是,我还没有看到任何关于这样做的文档,而我尝试提出自定义解决方案只会导致其他问题。有没有人知道我是否有一种简单,标准的方法可以解决这个问题?
tl; dr:我如何嵌套Django路由器?
答案 0 :(得分:1)
简短的回答是你没有。如果您使用ViewSets作为简化视图的方法,则需要遵守ViewSet的规则,如果您想拥有嵌套路线,可以使用@detail_route
和@list_route
来实现装饰者,但他们不像框架的其他部分那样表达你的资源,而且是一个体力劳动。
另一种方法是使用名为drf-nested-routers的第三方软件包,该软件包做得非常好,绝对可以满足您的期望。