design
This commit is contained in:
@ -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
|
||||
|
@ -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
|
||||
|
||||
|
Reference in New Issue
Block a user