2014-02-25 3 views
1

내 프로젝트에 대한 장고의 일반적인보기를 서브 클래 싱했습니다. 프런트 엔드 사이트에서 기본 CRUD보기를 만드는 데 광범위하게 사용합니다. 일부 모델은보기 만들기 만하고 일부는 읽기 및 업데이트가 있습니다.어떻게 장고 일반보기에 대한 URL을 자동화 할 수 있습니까?

이 방법은 잘 작동하지만 여전히 각 URL에 대해 코드 줄을 작성합니다. 예 :

url(r'^referrer/create/$',ReferrerCreateView.as_view(), name='referrer_create'), 
url(r'^referrer/$',ReferrerListView.as_view(), name='referrer_list'), 
url(r'^referrer/(?P<pk>\d+)/update/$',ReferrerUpdateView.as_view(), 

이름 = 'referrer_update'),

은 그때마다 모델 및 모델이 가지고있는 견해에 대해이 작업을 수행합니다. 이것은 나에게 매우 건조한 접근 방식으로 보이지 않습니다. 모델에 대해 생성 된 모든 일반 뷰에 대해 이러한 URL을 자동화하는 좋은 방법이 있습니까?

답변

1

해결 방법은 일련의보기가 주어진 경우 url() 호출 목록을 반환하는 메서드를 만드는 것입니다.

views = { 
    'base_name': 'referrer', 
    'create_view': ReferrerCreateView, 
    'list_view': ReferrerListView, 
    'update_view': ReferrerUpdateView, 
} 

def generate_urls(views): 
    return [ 
     url(r'^%s/create/$' % views['base_name'], views['create_view'].as_view(), '%s_create' % views['base_name'], 
     # and so on 
    ] 

같은 뭔가 그런 다음 당신은 당신이보기의 각 세트의

urlpatterns = patterns('', *generate_urls(views)) 

할 필요가있다.

나는 을 믿어야한다고 말하면을하지 말아야합니다. 이 솔루션 (또는 다른 구현)은 복잡하고 일이 잘못 될 경우 진행해야 할 추가 레이어가 추가됩니다.

미래의 디버그가 훨씬 쉬워지기 때문에 일부 상용구 코드, 특히 구성 코드를 사용하는 데는 문제가 없습니다.

+0

이것은 아름답습니다! 나는 이런 식으로 생각한 적이 없지만 API 세대와 그런 일을하는 좋은 방법 인 것처럼 보입니다. –

0

나는 똑같은 관심사가있다. 한 가지 대답은 django rest framework을 사용하여 자체적으로 그러한 URL 패턴을 구현하기 때문이다. 나는 아직이 해결책을 경험하지 못했다.

제 대안은 모든 모델에 대해 crud 작업 전용 파일을 만드는 것입니다. 그 해법을 통해 필자는 매칭 시간을 줄이고 관련 모델 패턴을 하나의 파일로 그룹화했습니다. 하지만 완전히 이해하지 못한다는 것을 이해합니다