This commit is contained in:
bkfox
2024-02-01 17:29:35 +01:00
parent cab6cacd0b
commit ad90255570
17 changed files with 87 additions and 250 deletions

View File

@ -7,13 +7,8 @@ __all__ = ["ArticleDetailView", "ArticleListView"]
class ArticleDetailView(PageDetailView):
model = Article
def get_sidebar_queryset(self):
qs = Article.objects.published().select_related("cover").order_by("-pub_date")
return qs
class ArticleListView(PageListView):
model = Article
has_headline = True
parent_model = Program
attach_to_value = StaticPage.Target.ARTICLES

View File

@ -1,4 +1,4 @@
from django.http import Http404, HttpResponse
from django.http import HttpResponse
from django.utils.translation import gettext_lazy as _
from django.views.generic import DetailView, ListView
from django.urls import reverse
@ -7,7 +7,6 @@ from honeypot.decorators import check_honeypot
from ..filters import PageFilters
from ..forms import CommentForm
from ..models import Comment, Category
from ..utils import Redirect
from .base import BaseView
from .mixins import AttachedToMixin, FiltersMixin, ParentMixin
@ -22,6 +21,13 @@ __all__ = [
class BasePageMixin:
category = None
def get_queryset(self):
query = super().get_queryset().select_subclasses()
user = self.request.user
if not user.is_staff:
query = query.published()
return query.select_related("cover")
def get_category(self, page, **kwargs):
if page:
if getattr(page, "category_id", None):
@ -53,7 +59,7 @@ class BasePageListView(AttachedToMixin, BasePageMixin, ParentMixin, BaseView, Li
return super().get(*args, **kwargs)
def get_queryset(self):
query = super().get_queryset().select_subclasses().published().select_related("cover")
query = super().get_queryset()
if self.category:
query = query.filter(category=self.category)
return query
@ -81,9 +87,6 @@ class BasePageDetailView(BasePageMixin, BaseView, DetailView):
template_name = "aircox/basepage_detail.html"
context_object_name = "page"
def get(self, *args, **kwargs):
return super().get(*args, **kwargs)
def get_context_data(self, **kwargs):
if self.object.cover:
kwargs.setdefault("cover", self.object.cover.url)
@ -91,27 +94,11 @@ class BasePageDetailView(BasePageMixin, BaseView, DetailView):
kwargs.setdefault("title", self.object.display_title)
return super().get_context_data(**kwargs)
def get_queryset(self):
return super().get_queryset().select_related("cover")
# This should not exists: it allows mapping not published pages
# or it should be only used for trashed pages.
def not_published_redirect(self, page):
"""When a page is not published, redirect to the returned url instead
of an HTTP 404 code."""
return None
def get_object(self):
if getattr(self, "object", None):
return self.object
obj = super().get_object()
if not obj.is_published:
redirect_url = self.not_published_redirect(obj)
if redirect_url:
raise Redirect(redirect_url)
raise Http404("%s not found" % self.model._meta.verbose_name)
self.category = self.get_category(obj)
return obj