Added views & paths for news items, categories and tags.

dev
Calum Andrew Morrell 2025-11-09 21:19:23 +00:00
parent f3c6b66e7d
commit 284bddd0d8
2 changed files with 57 additions and 2 deletions

14
news/urls.py Normal file
View File

@ -0,0 +1,14 @@
from django.urls import path
from .views import CategoryList, NewsItemDetail, NewsItemList, TagList
app_name = "news"
urlpatterns = [
path("", NewsItemList.as_view(), name="list"),
path("categories/", CategoryList.as_view(), name="categories"),
path("categories/<slug:category>/", NewsItemList.as_view(), name="list_category"),
path("tags/", TagList.as_view(), name="tags"),
path("tags/<slug:tag>/", NewsItemList.as_view(), name="list_tag"),
path("<slug:category>/<slug:slug>/", NewsItemDetail.as_view(), name="detail"),
]

View File

@ -1,3 +1,44 @@
from django.shortcuts import render
from django.shortcuts import get_object_or_404
from django.views.generic import DetailView, ListView
# Create your views here.
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()