【发布时间】:2023-03-27 11:53:02
【问题描述】:
我在博客应用程序中使用 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
【问题讨论】:
标签: python django django-views django-generic-views