Я использую общие представления 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