使用tastypie中的resource_name实现类似django url的功能



有没有一种方法可以使用resource_name在tastypie中创建一个类似于常规django-url的资源层次结构?我的目标是拥有如下的tastypie网址:<app_name>/<module_name>/<functionality>,但我遇到了麻烦。

我使用以下resource_name:创建了资源

图书馆/书籍
图书馆/书籍/货架
图书/流通

(注意父资源library/book没有尾部斜线)

在这种情况下,我可以很好地访问父资源。但是,当尝试访问其中一个子资源(例如/api/v1/library/books/circulation)时,我收到以下错误:

提供的资源查找数据无效(类型不匹配)。

另一方面,当我将父级的resource_name定义为library/books/(带有尾部斜杠)时,子级资源返回良好,但父级资源本身返回404错误。

如果我用下划线(library_bookslibrary_books_circulation)格式化resource_name,一切都很好,但它们真的很难看。。。

我正在运行Python 2.7.3,使用Django 1.6和Tastypie 0.10.0。

虽然我不确定使用带斜杠的resource_name的方法是否总是适用于您,但为了解决您的问题,您可以简单地更改URL注册的顺序。

注册url时,最后注册名称为"library/books"的资源。你有这个问题的原因是"图书馆/书籍/书架"被认为是带有"书架"pk的书。如果资源"library/books/shelf"的url模式将首先出现,那么Django将在尝试解析library/bbooks/pk之前捕获这些模式。

最新更新