forked from rc/aircox
cfr #121 Co-authored-by: Christophe Siraut <d@tobald.eu.org> Co-authored-by: bkfox <thomas bkfox net> Co-authored-by: Thomas Kairos <thomas@bkfox.net> Reviewed-on: rc/aircox#131 Co-authored-by: Chris Tactic <ctactic@noreply.git.radiocampus.be> Co-committed-by: Chris Tactic <ctactic@noreply.git.radiocampus.be>
This commit is contained in:
@@ -2,18 +2,14 @@ from django.http import HttpResponseRedirect
|
||||
from django.urls import reverse
|
||||
from django.views.generic.base import ContextMixin, TemplateResponseMixin
|
||||
|
||||
from ..models import Page
|
||||
|
||||
__all__ = ("BaseView", "BaseAPIView")
|
||||
|
||||
|
||||
class BaseView(TemplateResponseMixin, ContextMixin):
|
||||
has_sidebar = True
|
||||
"""Show side navigation."""
|
||||
has_filters = False
|
||||
"""Show filters nav."""
|
||||
list_count = 5
|
||||
"""Item count for small lists displayed on page."""
|
||||
related_count = 4
|
||||
related_carousel_count = 8
|
||||
title = ""
|
||||
|
||||
@property
|
||||
def station(self):
|
||||
@@ -22,12 +18,33 @@ class BaseView(TemplateResponseMixin, ContextMixin):
|
||||
# def get_queryset(self):
|
||||
# return super().get_queryset().station(self.station)
|
||||
|
||||
def get_sidebar_queryset(self):
|
||||
"""Return a queryset of items to render on the side nav."""
|
||||
return Page.objects.select_subclasses().published().order_by("-pub_date")
|
||||
def get_nav_menu(self):
|
||||
menu = []
|
||||
for item in self.station.navitem_set.all():
|
||||
try:
|
||||
if item.page:
|
||||
view = item.page.get_related_view()
|
||||
secondary = view and view.get_secondary_nav()
|
||||
else:
|
||||
secondary = None
|
||||
menu.append((item, secondary))
|
||||
except:
|
||||
import traceback
|
||||
|
||||
def get_sidebar_url(self):
|
||||
return reverse("page-list")
|
||||
traceback.print_exc()
|
||||
raise
|
||||
return menu
|
||||
|
||||
def get_secondary_nav(self):
|
||||
return None
|
||||
|
||||
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_page(self):
|
||||
return None
|
||||
@@ -35,22 +52,20 @@ class BaseView(TemplateResponseMixin, ContextMixin):
|
||||
def get_context_data(self, **kwargs):
|
||||
kwargs.setdefault("station", self.station)
|
||||
kwargs.setdefault("page", self.get_page())
|
||||
kwargs.setdefault("has_filters", self.has_filters)
|
||||
|
||||
has_sidebar = kwargs.setdefault("has_sidebar", self.has_sidebar)
|
||||
if has_sidebar and "sidebar_object_list" not in kwargs:
|
||||
sidebar_object_list = self.get_sidebar_queryset()
|
||||
if sidebar_object_list is not None:
|
||||
kwargs["sidebar_object_list"] = sidebar_object_list[: self.list_count]
|
||||
kwargs["sidebar_list_url"] = self.get_sidebar_url()
|
||||
|
||||
if "audio_streams" not in kwargs:
|
||||
kwargs["audio_streams"] = self.station.streams
|
||||
|
||||
if "model" not in kwargs:
|
||||
model = getattr(self, "model", None) or hasattr(self, "object") and type(self.object)
|
||||
kwargs["model"] = model
|
||||
|
||||
page = kwargs.get("page")
|
||||
if page:
|
||||
kwargs.setdefault("title", page.display_title)
|
||||
kwargs.setdefault("cover", page.cover and page.cover.url)
|
||||
elif self.title:
|
||||
kwargs.setdefault("title", self.title)
|
||||
|
||||
if "nav_menu" not in kwargs:
|
||||
kwargs["nav_menu"] = self.get_nav_menu()
|
||||
return super().get_context_data(**kwargs)
|
||||
|
||||
def dispatch(self, *args, **kwargs):
|
||||
|
||||
Reference in New Issue
Block a user