astro.tdg/news/views.py

45 lines
1.2 KiB
Python

from django.shortcuts import get_object_or_404
from django.views.generic import DetailView, ListView
from .models import Category, NewsItem
class CategoryList(ListView):
model = Category
class NewsItemDetail(DetailView):
model = NewsItem
class NewsItemList(ListView):
category = None
tag = None
paginate_by = 6
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 NewsItem.objects.filter(category=self.category).filter(
is_published=True
)
elif self.tag:
return NewsItem.objects.filter(tags=self.tag).filter(is_published=True)
else:
return NewsItem.objects.filter(is_published=True)
def get_context_data(self, *, object_list=None, **kwargs):
context = super(NewsItemList, self).get_context_data(**kwargs)
context["category"] = self.category
context["tag"] = self.tag
return context
class TagList(ListView):
template_name = "news/tag_list.html"
def get_queryset(self):
return NewsItem.tags.tag_model.objects.all()