Общие представления Django: когда использовать ListView и DetailView

Я использую общие представления Django на основе классов в приложении для блога. В одном из моих представлений отображается список сообщений с определенным тегом. Я могу написать это представление как ListViewсообщений, отфильтрованных по тегу. Или я могу написать это представление как DetailViewтега и добавить соответствующие сообщения в контекст.

Является ли один способ более правильным — или Pythonic — чем другой?

Подход 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
15
задан user1272534 19 March 2012 в 20:08
поделиться