2017-12-10 4 views
1

CBView에 Listview를 상속 받았습니다.쿼리 집합의 결과에 따라 템플릿과 CBV를 변경하십시오.

내가이 필요합니다

  1. 의 검색어에 어떤 요소가없는 경우, 하나가 비어 있으면, 내가 다른 메시지 또는 다른 템플릿

  2. 으로 템플릿을 표시해야 내가 갈 필요가 검색어 세트의 요소는 일부 이전 응답에 따라 DetailView

에 을 (재) 그 I 2에 대한 (다른 질문에)받은, 나는 내가 겹쳐 써야 할 것 같아.

내가 완전히 바꾼다면 나중에 변경 사항을 변경하면 문제가 발생할 수 있습니다. 페이지 매김, 컨텍스트 관련 코드가 있습니다.

super()을 호출하고 변수를 저장하면 get_queryset의 결과를 어떻게 알 수 있습니까?

답변

2

간단한 해결책은 CBV에서 get_template_names 메서드를 재정의하는 것입니다.

class MyCBV(django.views.generic.TemplateView): 
    ... 
    def get_template_names(self): 
     if not self.queryset.count(): 
      return ["custom_template1.html", ] 
     elif self.queryset.count() == 1: 
      return ["custom_template2.html", ] 
     else: 
      return ["default_template.html", ] 

도움이 되길 바랍니다. get_template_names를 오버라이드하는 것이 더 좋은 아이디어라고 생각합니다. get은 get_template_names 메소드를 재정의하는 것이므로 DRY를 유지하기 위해 다시 작성해야하는 몇 가지 작업을 수행합니다.