clean-up css; related publications; pagination

This commit is contained in:
bkfox
2023-11-26 21:35:37 +01:00
parent d075fecbce
commit bc697bd4bd
15 changed files with 564 additions and 1672 deletions

View File

@ -1,3 +1,5 @@
from django.shortcuts import reverse
from ..filters import EpisodeFilters
from ..models import Episode, Program, StaticPage
from .page import PageListView
@ -17,6 +19,14 @@ class EpisodeDetailView(ProgramPageDetailView):
kwargs["tracks"] = self.object.track_set.order_by("position")
return super().get_context_data(**kwargs)
def get_related_queryset(self):
return (
self.get_queryset().parent(self.object.parent).exclude(pk=self.object.pk).published().order_by("-pub_date")
)
def get_related_url(self):
return reverse("episode-list", kwargs={"parent_slug": self.object.parent.slug})
class EpisodeListView(PageListView):
model = Episode

View File

@ -119,7 +119,12 @@ class PageListView(FiltersMixin, BasePageListView):
if cat_id:
cat_id = int(cat_id)
kwargs["category_id"] = cat_id
return super().get_context_data(**kwargs)
context = super().get_context_data(**kwargs)
if context.get("parent") and not cat_id:
kwargs["category_id"] = context["parent"].category_id
return context
class PageDetailView(BasePageDetailView):
@ -128,6 +133,16 @@ class PageDetailView(BasePageDetailView):
template_name = None
context_object_name = "page"
related_count = 3
def get_related_queryset(self):
"""Return a queryset of related pages or None."""
return None
def get_related_url(self):
"""Return an url to the list of related pages."""
return None
def get_template_names(self):
return super().get_template_names() + ["aircox/page_detail.html"]
@ -138,8 +153,16 @@ class PageDetailView(BasePageDetailView):
if self.object.allow_comments and "comment_form" not in kwargs:
kwargs["comment_form"] = CommentForm()
kwargs["comments"] = Comment.objects.filter(page=self.object).order_by("-date")
if self.object.parent_subclass:
kwargs["parent"] = self.object.parent_subclass
if "related_objects" not in kwargs:
related = self.get_related_queryset()
if related:
related = related[: self.related_count]
kwargs["related_objects"] = related
kwargs["related_url"] = self.get_related_url()
return super().get_context_data(**kwargs)
@classmethod

View File

@ -1,3 +1,5 @@
import random
from django.urls import reverse
from ..models import Article, Page, Program, StaticPage, Episode
@ -23,6 +25,19 @@ class BaseProgramMixin:
class ProgramDetailView(BaseProgramMixin, PageDetailView):
model = Program
def get_related_queryset(self):
queryset = (
self.get_queryset()
.filter(category_id=self.object.category_id)
.exclude(pk=self.object.pk)
.published()
.order_by("-pub_date")[:50]
)
return random.sample(list(queryset), self.related_count)
def get_related_url(self):
return reverse("program-list") + f"?category__id={self.object.category_id}"
def get_context_data(self, **kwargs):
episodes = Episode.objects.program(self.object).published().order_by("-pub_date")
articles = Article.objects.parent(self.object).published().order_by("-pub_date")