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