Added views & paths for news items, categories and tags.
parent
f3c6b66e7d
commit
284bddd0d8
|
|
@ -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"),
|
||||
]
|
||||
|
|
@ -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()
|
||||
|
|
|
|||
Loading…
Reference in New Issue