我正在尝试通过Django-tastypie中的prepend_urls()
功能添加两种不同的访问同一ResourceModel的方法,但第二个url永远不会有效。
这是我的代码:
class UserResource(ModelResource):
class Meta:
...
my_id_uri_name = 'my_id'
name_uri_name = 'name'
def prepend_urls(self):
return [
url(
r"^(?P<resource_name>%s)/(?P<my_id>[\w\d_.-]+)/$"
% self._meta.resource_name, self.wrap_view('dispatch_detail'),
name="api_dispatch_detail_my_id"),
url(
r"^(?P<resource_name>%s)/(?P<name>[\w\d_.-]+)/$"
% self._meta.resource_name, self.wrap_view('dispatch_detail'),
name="api_dispatch_detail_name"),
]
我找不到有关在此处添加其他网址的任何有用资源。我错过了一些微不足道的事情吗?
答案 0 :(得分:2)
由于Zeograd关于regexp的建议,我已经解决了这个问题。
我更改了第一个{ID}表达式以匹配整数,第二个更改为字符串,如下所示:
def prepend_urls(self):
return [
url(
r"^(?P<resource_name>%s)/(?P<my_id>\d+)/$"
% self._meta.resource_name, self.wrap_view('dispatch_detail'),
name="api_dispatch_detail_id"),
url(
r"^(?P<resource_name>%s)/(?P<name>[\w\d_.-]+)/$"
% self._meta.resource_name, self.wrap_view('dispatch_detail'),
name="api_dispatch_detail_name"),
]
答案 1 :(得分:0)
你的2个正则表达式匹配相同的输入网址,因为它们按顺序处理,第2个从不匹配。 您可能希望使用中间url片段来区分2,例如
r"^(?P<resource_name>%s)/by-name/(?P<name>[\w\d_.-]+)/$"
代表第二个