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

时间:2014-02-26 15:38:41

标签: python django tastypie

有没有办法使用resource_name创建tastypie中的资源层次结构,其行为类似于常规django网址?我的目标是看起来像这样的tastypie网址:<app_name>/<module_name>/<functionality>,但我遇到了麻烦。

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

  

库/书籍
  图书馆/书籍/架
  库/书籍/循环

(请注意,父资源library/book没有尾部斜杠)

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

  

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

另一方面,当我将父级resource_name定义为library/books/(带有斜杠)时,子资源恢复正常 - 但父资源本身返回404错误。

如果我使用下划线(resource_namelibrary_books)格式化library_books_circulation,那么一切都很好 - 但是他们真的丑陋... < / p>

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

1 个答案:

答案 0 :(得分:1)

虽然我不确定使用带有斜杠的resource_name的方法总是适合您,但为了解决您的问题,您只需更改URL注册的顺序。

注册网址时,最后注册名为“library / books”的资源。 您遇到问题的原因是“图书馆/书籍/书架”被作为带有“架子”的pk的书来捕获。如果资源“library / books / shelf”的url模式将首先出现,那么在尝试解析library / books / pk之前,它们将被Django捕获。