page templates & views reordering

This commit is contained in:
bkfox
2020-09-22 00:51:00 +02:00
parent 5a17d034c4
commit ea17141321
13 changed files with 172 additions and 145 deletions

View File

@ -6,7 +6,7 @@ from .home import HomeView
from .article import ArticleDetailView, ArticleListView
from .episode import EpisodeDetailView, EpisodeListView, DiffusionListView
from .log import LogListView, LogListAPIView
from .page import PageDetailView, PageListView
from .page import BasePageListView, BasePageDetailView, PageListView, PageDetailView
from .program import ProgramDetailView, ProgramListView, \
ProgramPageDetailView, ProgramPageListView

View File

@ -12,62 +12,47 @@ from .base import BaseView
from .mixins import AttachedToMixin, ParentMixin
__all__ = ['PageDetailView', 'PageListView']
__all__ = ['BasePageListView', 'BasePageDetailView', 'PageDetailView', 'PageListView']
class PageListView(AttachedToMixin, ParentMixin, BaseView, ListView):
template_name = 'aircox/page_list.html'
class BasePageListView(AttachedToMixin, ParentMixin, BaseView, ListView):
""" Base view class for BasePage list. """
template_name = 'aircox/basepage_list.html'
item_template_name = 'aircox/widgets/page_item.html'
has_sidebar = True
has_filters = True
paginate_by = 20
paginate_by = 2
has_headline = True
categories = None
def get(self, *args, **kwargs):
self.categories = set(self.request.GET.getlist('categories'))
return super().get(*args, **kwargs)
def get_queryset(self):
qs = super().get_queryset().select_subclasses().published() \
.select_related('cover', 'category')
# category can be filtered based on request.GET['categories']
# (by id)
if self.categories:
qs = qs.filter(category__slug__in=self.categories)
return qs.order_by('-pub_date')
def get_categories_queryset(self):
# TODO: use generic reverse field lookup
categories = self.model.objects.published() \
.filter(category__isnull=False) \
.values_list('category', flat=True)
return Category.objects.filter(id__in=categories)
return super().get_queryset().select_subclasses().published() \
.select_related('cover')
def get_context_data(self, **kwargs):
kwargs.setdefault('item_template_name', self.item_template_name)
kwargs.setdefault('filter_categories', self.get_categories_queryset())
kwargs.setdefault('categories', self.categories)
kwargs.setdefault('has_headline', self.has_headline)
return super().get_context_data(**kwargs)
class PageDetailView(BaseView, DetailView):
""" Base view class for pages. """
class BasePageDetailView(BaseView, DetailView):
""" Base view class for BasePage. """
template_name = 'aircox/basepage_detail.html'
context_object_name = 'page'
has_filters = False
def get_queryset(self):
return super().get_queryset().select_related('cover', 'category')
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. """
When a page is not published, redirect to the returned url instead of an
HTTP 404 code.
"""
return None
def get_object(self):
@ -85,6 +70,55 @@ class PageDetailView(BaseView, DetailView):
def get_page(self):
return self.object
class PageListView(BasePageListView):
""" Page list view. """
template_name = None
has_filters = True
categories = None
def get(self, *args, **kwargs):
self.categories = set(self.request.GET.getlist('categories'))
return super().get(*args, **kwargs)
def get_template_names(self):
return super().get_template_names() + ['aircox/page_list.html']
def get_queryset(self):
qs = super().get_queryset().select_related('category') \
.order_by('-pub_date')
# category can be filtered based on request.GET['categories']
# (by id)
if self.categories:
qs = qs.filter(category__slug__in=self.categories)
return qs
def get_categories_queryset(self):
# TODO: use generic reverse field lookup
categories = self.model.objects.published() \
.filter(category__isnull=False) \
.values_list('category', flat=True)
return Category.objects.filter(id__in=categories)
def get_context_data(self, **kwargs):
kwargs.setdefault('filter_categories', self.get_categories_queryset())
kwargs.setdefault('categories', self.categories)
return super().get_context_data(**kwargs)
class PageDetailView(BaseView, DetailView):
""" Base view class for pages. """
template_name = None
context_object_name = 'page'
has_filters = False
def get_template_names(self):
return super().get_template_names() + ['aircox/page_detail.html']
def get_queryset(self):
return super().get_queryset().select_related('category')
def get_context_data(self, **kwargs):
if self.object.allow_comments and not 'comment_form' in kwargs:
kwargs['comment_form'] = CommentForm()
@ -109,5 +143,3 @@ class PageDetailView(BaseView, DetailView):
return self.get(request, *args, **kwargs)