在prepend_urls中的Django-tastypie多个url

时间:2013-11-07 11:40:53

标签: python django api tastypie

我正在尝试通过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"),
        ]

我找不到有关在此处添加其他网址的任何有用资源。我错过了一些微不足道的事情吗?

2 个答案:

答案 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_.-]+)/$"

代表第二个