Source code for pagetools.pages.views

from django.contrib import messages
from django.core.exceptions import ObjectDoesNotExist
from django.http import JsonResponse
from django.http.response import Http404
from django.utils.translation import gettext as _
from django.views.generic.detail import DetailView

from pagetools.menus.views import SelectedMenuentriesMixin
from pagetools.utils import is_ajax
from pagetools.widgets.views import WidgetPagelikeMixin

from .models import Page


[docs]class IncludedFormMixin: included_form = None success_url = "/"
[docs] def get_form_class(self): self.object = self.get_object() fname = self.object.included_form if fname: return self.object.includable_forms.get(fname) return None
[docs] def get(self, request, *_args, **kwargs): formcls = self.get_form_class() if formcls and kwargs.get("form", None) is None: fkwargs = self.get_form_kwargs() kwargs["form"] = formcls(**fkwargs) return self.render_to_response(self.get_context_data(**kwargs))
[docs] def post(self, request, *_args, **kwargs): self.get_object() form = self.get_form_class()(request.POST, **self.get_form_kwargs()) if form.is_valid(): kwargs["form"] = None return self.form_valid(form) return self.form_invalid(form)
[docs] def form_valid(self, *_args, **_kwargs): if is_ajax(self.request): return JsonResponse({"data": _("Mail send")}, status=200) messages.success(self.request, _("Mail send")) return self.get(self.request, form=None)
[docs] def form_invalid(self, form): if is_ajax(self.request): return JsonResponse(form.errors, status=400) messages.error(self.request, form.get_error_msg()) return self.get(self.request, form=form)
[docs] def get_form_kwargs(self): formcls = self.get_form_class() kwargs = {} if ( getattr(formcls, "USE_MAILRECEIVERS", False) and getattr(self, "object") and getattr(self.object, "email_receivers_list") ): kwargs["mailreceivers"] = self.object.email_receivers_list() return kwargs
[docs]class AuthPageMixin:
[docs] def get_queryset(self, **kwargs): user = self.request.user if not user.is_authenticated: kwargs["login_required"] = False kwargs["user"] = user qs = self.model.public.lfilter(**kwargs) return qs
[docs]class BasePageView(SelectedMenuentriesMixin, WidgetPagelikeMixin, DetailView): pass
[docs]class PageView(AuthPageMixin, IncludedFormMixin, BasePageView): model = Page
[docs] def get_pagetype_name(self, **kwargs): return self.object.pagetype.name if self.object.pagetype else super().get_pagetype_name(**kwargs)
[docs] def get_pagetype(self, **kwargs): # pylint: disable=arguments-differ return self.object.pagetype or super().get_pagetype(**kwargs)
[docs] def get_context_data(self, **kwargs): kwargs["page_title"] = self.object.title kwargs = super().get_context_data(**kwargs) return kwargs
[docs]class IndexView(PageView):
[docs] def get_object(self, *_args, **_kwargs): if getattr(self, "object", None): return self.object try: self.object = self.get_queryset().get(slug="start") # pylint: disable=attribute-defined-outside-init return self.object except ObjectDoesNotExist: raise Http404 # pylint: disable=raise-missing-from