【发布时间】:2012-06-15 17:38:31
【问题描述】:
我正在使用 tastypie 为我的应用程序提供 API。我更喜欢没有尾部斜杠的 URL。我更喜欢/api/v1/entry/set/1;3 而不是/api/v1/entry/set/1;3/。我已经关闭了 django 的 APPEND_SLASH 并打开了 TASTYPIE_ALLOW_MISSING_SLASH。
这很好用,除了 get_multiple (/set) ,它的文档中的 sweetpie 注释不能在没有尾部斜杠的情况下工作。 sweetpie 代码中的 URL 正则表达式是:
# Due to the way Django parses URLs, ``get_multiple`` won't work without
# a trailing slash.
...
url(r"^(?P<resource_name>%s)/set/(?P<%s_list>\w[\w/;-]*)/$" %
(self._meta.resource_name, self._meta.detail_uri_name),
self.wrap_view('get_multiple'), name="api_get_multiple"),
...
我已经证实这是真的。如果启用了 APPEND_SLASH,/api/v1/notes/set/2;1 和 /api/v1/notes/set/2;1/ 匹配良好,但是将上述正则表达式中的 / 更改为 /? 会使 django 与模式不匹配。
当我尝试手动使用re 模块时,模式匹配正确。为什么 django 不匹配没有斜杠的 URL?
【问题讨论】:
-
您所做的似乎是正确的。我只能认为您可能没有更新正确的代码...尝试用一些可笑的东西替换正则表达式。
-
我确定我正在编辑正确的代码。该评论表明这种行为是应该发生的。我真正的问题是为什么
-
这正是美味派喜欢做事的方式。真的很烦人。
-
其实已经修好了,看答案。