2013-01-17 2 views
0

하나의 믹스 인의 처리의 ListView와 DetailView이 허용장고 일반적인 클래스 기반 뷰 - 나는 기본 URI이있는 온라인 문서 장고 응용 프로그램이

/path/to/docs/<DOMAIN>/ 

해당 도메인 내에서 문서의 목록을 보려면을 . 그것은 GCBV ListView을 사용합니다. 다음을 사용하여 DOCNAME의 DetailView을 요청할 수 있습니다 슬러그 꽤 자기 설명하고해야 좋은 슬러그로 하나 개의 레코드를 반환

/path/to/docs/<DOMAIN>/<SLUG>/ 

. 다음에 자식 페이지의 라인을 따라, 자신의 템플릿이 있습니다 :이 버전없는 문서의 경우 간단

/path/to/docs/<DOMAIN>/<SLUG>/foo/ 
/path/to/docs/<DOMAIN>/<SLUG>/bar/ 
/path/to/docs/<DOMAIN>/<SLUG>/baz/ 

. 사용자 요청의 경우

/path/to/docs/<DOMAIN>/<SLUG>/<VERSION>/ 

이 경우

/path/to/docs/<DOMAIN>/<SLUG>/<VERSION>/foo/ 
/path/to/docs/<DOMAIN>/<SLUG>/<VERSION>/bar/ 
/path/to/docs/<DOMAIN>/<SLUG>/<VERSION>//baz/ 

을 :

그러나, 다른 도메인에 내가가 사용할 수있는 DOCNAMEs의 다른 버전을 할 ("연합"를 호출 할 수 있습니다)
/path/to/docs/<DOMAIN>/<SLUG>/ 

사용자에게 DetailView가 제공되는 것을 원하지 않습니다. 설명서를 사용하는 각 버전의 ListView가 표시되도록하고 싶습니다. 르 : 나는 GCBV에 꽤 폭 넓은 독서를 수행하고 그들 중 많은 다른 앱에서 이전에 서브 클래스

Fantastic docs - Version 1 (/path/to/docs/federated/fantastic/1/) 
Fantastic docs - Version 2 (/path/to/docs/federated/fantastic/2/) 
Fantastic docs - Version 3 (/path/to/docs/federated/fantastic/3/) 

,하지만 난 내가 처리 할 수 ​​urls.py에서 하나의 항목을 가질 수 있다는 의심을 두 가지 유형의 쿼리 (Detail 및 ListView). 실제로 Django는 GCBV, 특히 w.r.t를 혼합하는 것에 대해 warns 문서를 사용합니다. get_context_data().

내가 내 믹스 인 내부하는 도메인 이름을보고하고, 그 기초 (버전 문서 용)의 ListView 또는 (버전이 지정되지 않은 문서의 경우) DetailView 중 하나에 해제 요청을 포크 않습니다. 나는 장고 문서 전체를 검색했으며 이에 대한 예를 보지 못했다. 누구든지 나를 도울 수 있습니까?

참고 : 한 생각이 나에게 발생 않습니다 urls.py 내가 할 수에서 실제로 하드 코딩 패턴의 도메인 이름을 입력합니다. 그래서 대신 kwarg < 도메인 > 사용 :

:보기에, 내가 좋아하는 뭔가를 할 수 (/ 다른 사람이 경우에)

urlpatterns = patterns('', 
    url(r'^(?P<domain>[\w-]+)/(?P<slug>[\w-]+)/(?P<version>\d{1})/$', MyMixin.as_view(
      queryset=Docs.objects.all() 
     ), 
    )), 
) 

을하고 논리 판단으로 도메인 kwarg를 사용하여

urlpatterns = patterns('', 
    url(r'^federated/(?P<slug>[\w-]+)/(?P<version>\d{1})/$', MyListViewMixin.as_view(
      queryset=Docs.objects.all() 
     ), 
    )), 
    url(r'^nonfederated/(?P<slug>[\w-]+)/$', MyDetailViewMixin.as_view(
      queryset=Docs.objects.all() 
     ), 
    )), 
) 

그러나 DOMAIN이 버전 관리 될 문서의 수와 얼마나 많은 문서인지 알 수 없습니다. 가능한 한 제네릭이어야합니다 (말장난을 용서하십시오). 미리 감사드립니다.

답변

1
대신 (개념적으로 엉망이 될 것이다 어려운 유지하는) 하나 개의보기에 ListViewDetailView을 혼합, 나는 그들이 버전 것처럼 모든 귀하의 의견을 설계 제안 및 버전 1 가진 사람들로 버전없는 사람을 치료

(또는 유사한 불특정 버전 번호).

국부없는 웹 사이트에서 /path/to/docs/<DOMAIN>/<SLUG>//path/to/docs/<DOMAIN>/1/<SLUG>/과 같은 역할을합니다.

페더레이션 된 웹 사이트에서 /path/to/docs/<DOMAIN>/<SLUG>/ URL은 사용 가능한 버전 목록 (ListView)을 제공합니다. /path/to/docs/<DOMAIN>/<LATEST_VERSION>/<SLUG>/로 리디렉션, 하나있을 경우이 도메인

  • 사용할 수 있습니다 얼마나 많은 버전

    • 확인 :

      는 다음을 수행하는 볼 수있는 위의 동작을 구현할 수 있습니다.

    • 여러 버전이있는 경우 사용 가능한 버전 목록을 표시하고 사용자가 방문 할 버전을 선택하게하십시오.

    전진되지 않은 웹 사이트는 단순히 한 버전의 문서 만 가지고있는 웹 사이트 일뿐입니다. 앞으로이 기능이 변경되면 버전이있는 문서로 쉽게 전환 할 수 있습니다.

  • +0

    여기에는 좋은 조언이 있습니다. - 감사합니다! – tatlar