2012-03-19 2 views
13

블로그 응용 프로그램에서 Django의 클래스 기반 제네릭 뷰를 사용하고 있습니다. 내보기 중 하나는 특정 태그가있는 게시물 목록을 표시합니다. 이보기는 태그로 필터링 된 게시물의 ListView 개를 쓸 수 있습니다. 또는이보기를 태그의 DetailView으로 작성하고 관련 게시물을 컨텍스트에 추가 할 수 있습니다.Django 일반보기 : ListView와 DetailView를 사용해야하는 경우

다른 방법보다 한 가지 방법이 더 적절합니까?

ListView 접근 방식은 더 의미가 있습니다. 왜냐하면 내가 원하는 것은 목록입니다.하지만 역시 약간 더 복잡합니다. 그것은 내가 두 가지 방법을 덮어 쓸 것을 요구한다. DetailView 접근 방식을 사용하면 하나의 방법을 덮어 쓰면됩니다.

class PostTagView(ListView): 
    """Display all blog posts with a given tag.""" 
    queryset = Post.objects.published() 

    def get_context_data(self, **kwargs): 
     context = super(PostTagView, self).get_context_data(**kwargs) 
     context['tag'] = get_object_or_404(Tag, slug=self.kwargs['slug']) 
     return context 

    def get_queryset(self, **kwargs): 
     queryset = super(PostTagView, self).get_queryset() 
     return queryset.filter(tags__slug=self.kwargs['slug']) 


class TagDetailView(DetailView): 
    """Display all blog posts with a given tag.""" 
    model = Tag 

    def get_context_data(self, **kwargs): 
     context = super(TagDetailView, self).get_context_data(**kwargs) 
     context['object_list'] = Post.objects.published().filter(tags__slug=self.kwargs['slug']) 
     return context 

답변

6

일반적으로 URL의 매개 변수를 살펴보십시오. slugTag 인 경우 DetailView 일 가능성이 높으며 ListView이 아닌 경우입니다.

이 경우 두 번째 방법은 적은 코드를 사용하며 더 우아합니다. 그러나 나중에 볼 때 수행 할 작업에 따라 다릅니다. 게시물을 편집하기 위해 양식을 추가하려면 ListView을 대신 사용하는 것이 좋습니다. 그러나 다른 하나를 선호하는 기술적 인 이유가 없습니다. 한 가지 접근 방식으로 다른 코드보다 더 많은 코드를 작성하게 될지도 모릅니다.

+1

URL 매개 변수와 일치시키는 것이 좋습니다. – user1272534

+0

좋은 답변입니다. 이제 어떻게 페이지 매김 하시겠습니까? 목록보기를 사용하면 사소한 일입니다. 자세히보기로, 나는 길을 잃는다. ( –

+2

@DanGayle :'DetailView'는 페이지가 지정되어서는 안되며, 하나의 객체에만 사용하도록되어 있습니다. –

1

흥미로운 질문입니다. 불행히도, 그 대답은 그리 흥미롭지 않습니다. 둘 중 어느 것이 당신과 당신의 앱에 가장 적합합니다. 인수는 두 접근법 모두 동일하게 만들 수 있으므로 실제로는 판단을위한 호출입니다.

관련 문제