Source code for pagetools.widgets.views

from .models import PageType
from .utils import get_areas_for_type


[docs]class WidgetViewMixin: """Add `areas` context data. Expects a `get_pagetype_name` method, see `WidgetPagelikeMixin` See ::class::pagetools.widgets.models.WidgetInArea """ add_pagetype_promise = True """If set, the widget context processor will not adding areas"""
[docs] def get_context_data(self, **kwargs): kwargs = super().get_context_data(**kwargs) ptname = self.get_pagetype_name(**kwargs) ptype = self.get_pagetype(ptname=ptname, **kwargs) kwargs["areas"] = get_areas_for_type(ptype, kwargs, request=self.request) kwargs["pagetype_name"] = ptname return kwargs
[docs] def get_pagetype(self, ptname=None, **kwargs): ptype = None if ptname is None: ptname = self.get_pagetype_name(**kwargs) if ptname: try: ptype = PageType.objects.get(name=ptname) except PageType.DoesNotExist: pass return ptype
[docs]class WidgetPagelikeMixin(WidgetViewMixin): """A `WidgetViewMixin` that tries to find the pagetype_name by kwargs or attribute"""
[docs] def get_pagetype_name(self, **kwargs): ptname = kwargs.get("pagetype_name", None) if ptname is None: ptname = getattr(self, "pagetype_name", None) return ptname