我想向我的api路由器添加一个url名称空间,但是当我这样做时,路由器仍然会查找没有名称空间的url:
router = DefaultRouter()
router.register(r'users', UserViewSet)
router.register(r'events', EventViewSet)
router.register(r'comments', CommentViewSet)
urlpatterns = patterns('apiroot.views',
url(r'^', include(router.urls, namespace='api')),
)
可浏览的api寻找像'user-list'
和'user-detail'
这样的url名称,而不是'api:user-list'
,这是我希望发生的事情。
我假设有一个简单的解决方案(这看起来是一个非常标准的事情想要做),但是我在django rest框架文档中找不到任何解决方案。如果我在文档中遗漏了一些内容,请共享一个链接,或者如果我搞错了(即“你为什么要这么做,这是不好的做法”或其他什么),请解释管理api url的正确方法。谢谢!
这是一个非常古老的问题,卡尔顿·吉布森目前接受的答案只是GitHub上一个pull请求的链接。
当搜索web以使用带有名称空间的Django REST框架路由器时,它在结果中排名第一。关于这个话题,这似乎是唯一的疑问。
因为代码示例没有具体的答案,所以我想在这里添加我的解决方案。
让我们从OP的问题中找出
EventViewSet
。对于这个视图集,应该有一个模型类Event
和一个模型序列化器EventSerializer
。EventSerializer
可能是这样的:这是包含
url
字段的HyperlinkedModelSerializer
的示例。任何像
HyperlinkedIdentityField
或HyperlinkedRelatedField
这样以view_name
为参数的超链接字段,都应该在声明中或通过extra_kwargs
传递包含命名空间的正确视图名称。对于假定的
CommentSerializer
(对应于CommentViewSet
),它可能看起来像:有一个pull request open for this currently。请随意参加讨论。
相关问题 更多 >
编程相关推荐