aircox/aircox_web/views.py
2019-07-01 05:02:13 +02:00

49 lines
1.7 KiB
Python

from django.db.models import Q
from django.shortcuts import get_object_or_404, render
from django.views.generic.base import TemplateView
from content_editor.contents import contents_for_item
from .models import Site, Page
from .renderer import site_renderer, page_renderer
def route_page(request, path=None, *args, site=None, **kwargs):
# TODO/FIXME: django site framework | site from request host
# TODO: extra page kwargs (as in pepr)
site = Site.objects.all().order_by('-default').first() \
if site is None else site
page = get_object_or_404(
# TODO: published
Page.objects.select_subclasses()
.filter(Q(status=Page.STATUS.published) |
Q(status=Page.STATUS.announced)),
path="/{}/".format(path) if path else "/",
)
kwargs['page'] = page
return page.view(request, *args, site=site, **kwargs)
class PageView(TemplateView):
""" Base view class for pages. """
template_name = 'aircox_web/page.html'
site = None
page = None
def get_context_data(self, **kwargs):
page = kwargs.setdefault('page', self.page or self.kwargs.get('site'))
site = kwargs.setdefault('site', self.site or self.kwargs.get('site'))
if kwargs.get('regions') is None:
contents = contents_for_item(page, page_renderer._renderers.keys())
kwargs['regions'] = contents.render_regions(page_renderer)
if kwargs.get('site_regions') is None:
contents = contents_for_item(site, site_renderer._renderers.keys())
kwargs['site_regions'] = contents.render_regions(site_renderer)
return super().get_context_data(**kwargs)