from django.shortcuts import get_object_or_404 from django.views.generic import DetailView, ListView from .models import Article, Category class ArticleList(ListView): category = None tag = None paginate_by = 9 def get_queryset(self): category_slug = self.kwargs.get('category', None) self.tag = self.kwargs.get('tag', None) if category_slug: self.category = get_object_or_404(Category, slug=category_slug) return Article.objects.filter(category=self.category).filter(is_published=True) elif self.tag: return Article.objects.filter(tags=self.tag).filter(is_published=True) else: return Article.objects.filter(is_published=True) def get_context_data(self, *, object_list=None, **kwargs): context = super(ArticleList, self).get_context_data(**kwargs) context['category'] = self.category context['tag'] = self.tag return context class ArticleDetail(DetailView): model = Article class CategoryList(ListView): model = Category class TagList(ListView): template_name = 'articles/tag_list.html' def get_queryset(self): return Article.tags.tag_model.objects.all()