2012-09-07 35 views
5

nếu có ai đọc Danh sách gửi thư Tastypie: Tôi không nhận được câu trả lời ở đó, vì vậy xin lỗi vì đã đăng ký ở đây.Xây dựng các url ngược trong get_resource_uri

Trong Tastypie, tôi đã thay đổi mẫu URL của tài nguyên, vì tôi sử dụng khóa khác ngoài PK. Điều này làm việc tốt khi tôi truy cập Tài nguyên. Bây giờ tôi muốn lồng Tài nguyên này vào Tài nguyên mẹ, nhưng Tài nguyên lồng nhau chứa các URI với PK, không phải khóa tùy chỉnh của tôi. Điều tôi học được là trong trường hợp của tôi, tôi phải thay đổi get_resource_uri của đứa trẻ.

Phương pháp trong tài nguyên của con tôi (mà là một NamespacedResource) trông như thế này:

def get_resource_uri(self, bundle_or_obj): 

    obj = bundle_or_obj.obj if isinstance(bundle_or_obj, Bundle) else bundle_or_obj 

    kwargs={ 
     'resource_name': self._meta.resource_name, 
     'custom_id': obj.custom_id 
     } 

    return self._build_reverse_url('api_dispatch_detail', kwargs=kwargs) 

phương pháp url override của đứa trẻ là thế này:

def override_urls(self): 
    return [ 
     url(r"^(?P<resource_name>%s)/(?P<custom_id>[-_\w\d]+)%s$" % (
       self._meta.resource_name, 
       trailing_slash() 
      ), 
      self.wrap_view('dispatch_detail'), 
      name="api_dispatch_detail" 
     ), 
    ] 

Nhưng ứng dụng không thể đảo ngược URL. Tôi gặp lỗi này:

Reverse for 'api_dispatch_detail' with arguments '()' and keyword arguments '{'custom_id': u'3_ee5-4423', 'resource_name': 'myresource'} not found. 

Làm cách nào để đảo ngược URL chính xác?

Xin cảm ơn trước.

Trả lời

2

Các url nội bộ của deliciouspie luôn cần resource_nameapi_name kwargs.

kwargs của bạn nên bao gồm:

kwargs = { 
    'api_name': 'v1', # Or whatever you have set for your api 
    'resource_name': self._meta.resource_name, 
    'custom_id': obj.custom_id 
} 
+0

hoàn hảo, cảm ơn! – schneck

Các vấn đề liên quan