하나의 믹스 인의 처리의 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이 버전 관리 될 문서의 수와 얼마나 많은 문서인지 알 수 없습니다. 가능한 한 제네릭이어야합니다 (말장난을 용서하십시오). 미리 감사드립니다.
여기에는 좋은 조언이 있습니다. - 감사합니다! – tatlar