2014-11-12 3 views
0

Tastypie는 간단한 리소스 URL에 대한 url 패턴을 자동으로 생성 할 수 있습니다.tastypie가 comlex URL을 어떻게 처리합니까?

예, /user/1/, /group/2/를 들어, 난 단지 된 UserResource 및 GroupResource

하지만를 정의 할 필요가 무엇을 내가 그룹의 모든 사용자를 검색 할 말, /group/2/user/ 같은 API의 URL이있는 경우 2.

이 tastypie합니까 이 문제를 해결할 수있는 해결책이 있습니까?

답변

1

당신은 tastypie.Resource.prepend_urls 방법을 사용할 수 있습니다

from django.conf.urls import url 
from tastypie.utils import trailing_slash 

class MyResource(Resource): 
    def prepend_urls(self): 
     return [ 
      url(r"^(?P<resource_name>%s)/(?P<%s>.*?)/user%s$" % (self._meta.resource_name, self._meta.detail_uri_name, trailing_slash()), self.wrap_view('group_user'), name="api_group_user"), 
     ] 

    def group_user(self, request, **kwargs): 
     # Your API view. 
     return self.create_response(request, {}) 

내가 일반적으로 바로 가기 방법을 만들을하는 그 긴, 추악한 URL을 :

def create_detail_url(url_string, view_method_name, view_name): 
    url_string = r"^(?P<resource_name>%s)/(?P<%s>.*?)" + url_string + r"%s$" 
    url_string = url_string % (self._meta.resource_name, self._meta.detail_uri_name, trailing_slash()) 
    return url(url_string, self.wrap_view(view_method_name), name="api_" + view_name) 

prepend_urls 방법 모양과 같이한다 :

def prepend_urls(self): 
    return [ 
     create_detail_url(r"/user", "group_user", "group_user"), 
    ] 
+0

이게 정말 도움이 되네, ~~ –

+0

글쎄, 그것은 보인다 원래 DETAIL URL, 즉^(P % s)/(? P % s)가 없으므로 hat^(? P % s)/(? P <%s>. *?)/user % s $에 연결할 수 없습니다. P <%s> \ w [\ w/-] *) % s $가 그것을 대신합니다. –

+0

@EricZheng,'prepend_urls' 메소드는 일반 URL보다 먼저 결과 목록을 삽입하므로 일반 URL보다 우선합니다. 'prepend_urls'에서 세부 URL에 사용자 정의보기를 추가하여 확인할 수 있습니다. –

관련 문제