1

我正在尝试通过prepend_urls()Django-tastypie 中的功能添加两种不同的方法来访问相同的 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"),
        ]

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

4

2 回答 2

2

感谢 Zeograd 关于正则表达式的建议,我已经解决了这个问题。

我将第一个 {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"),
        ]
于 2013-11-07T13:18:33.287 回答
0

您的 2 个正则表达式匹配相同的输入 url,因为它们是按顺序处理的,第二个从不匹配。您可能希望使用中间 url 片段来区分 2,例如

r"^(?P<resource_name>%s)/by-name/(?P<name>[\w\d_.-]+)/$"

第二个

于 2013-11-07T11:53:48.100 回答