gpt4 book ai didi

django - 使用 django_taggit 列出具有特定标签的对象

转载 作者:行者123 更新时间:2023-12-02 04:40:49 26 4
gpt4 key购买 nike

我有一个博客应用程序,使用 django_taggit 。我的 HomePageViewArchiveIndexView 的子类,并且运行良好。

现在我希望以下链接可以工作:http://mysite.com/tag/yellow 并且我想使用 ArchiveIndexView 泛型类并传入根据 tag_slug 进行过滤的修改后的查询集。我想这样做是因为我想使用与主页相同的模板。

我的urls.py

url(r'^$', HomePageView.as_view(paginate_by=5, date_field='pub_date',template_name='homepage.html'),
),

url(r'^tag/(?P<tag_slug>[-\w]+)/$', 'tag_view'), # I know this is wrong

我的views.py

class HomePageView(ArchiveIndexView):
"""Extends the detail view to add Events to the context"""
model = Entry

def get_context_data(self, **kwargs):
context = super(HomePageView, self).get_context_data(**kwargs)
context['events'] = Event.objects.filter(end_time__gte=datetime.datetime.now()
).order_by('start_time')[:5]
context['comments'] = Comment.objects.filter(allow=True).order_by('created').reverse()[:4]
return context

我意识到我在这里迷失了方向,并且需要一些帮助来了解如何创建一个新类 TagViewPage() ,该类通过过滤 tag_slug 来修改查询集。

最佳答案

关键是重写 get_queryset 方法,以便查询集仅包含具有所选标记的返回条目。我已使 TagListView 继承自 HomePageView,以便它包含相同的上下文数据 - 如果这不重要,您可以将 ArchiveIndexView 子类化。

class TagListView(HomePageView):
"""
Archive view for a given tag
"""

# It probably makes more sense to set date_field here than in the url config
# Ideally, set it in the parent HomePageView class instead of here.
date_field = 'pub_date'

def get_queryset(self):
"""
Only include entries tagged with the selected tag
"""
return Entry.objects.filter(tags__name=self.kwargs['tag_slug'])

def get_context_data(self, **kwargs):
"""
Include the tag in the context
"""
context_data = super(TagListView, self).get_context_data(self, **kwargs)
context_data['tag'] = get_object_or_404(Tag, slug=self.kwargs['tag_slug'])
return context_data

# urls.py
url(r'^tag/(?P<tag_slug>[-\w]+)/$', TagListView.as_view(paginate_by=5, template_name='homepage.html')),

关于django - 使用 django_taggit 列出具有特定标签的对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8547880/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com