Newer
Older
# -*- coding: utf-8 -*-
from __future__ import unicode_literals
from django.template.loader import select_template
from django.utils.encoding import smart_bytes
from django.utils.translation import ugettext_lazy as _
from cms.plugin_base import CMSPluginBase
from cms_highlighted_content.admin import HighlightedContentItemInlineBase
from cms_highlighted_content.models import HighlightedContentItemBase
class HighlightedContentPluginBase(CMSPluginBase):
cache = True
name = _('HighlightedContent')
raw_id_fields = ('page_link',)
inlines = []
def __init__(self, *args, **kwargs):
if not hasattr(self.__class__, 'highlighted_content_item_inline_class'):
highlighted_content_item_model = None
for m2m in self.model._meta.related_objects:
if issubclass(m2m.related_model, HighlightedContentItemBase):
highlighted_content_item_model = m2m.related_model
break
if not highlighted_content_item_model:
raise Exception('Can not get your HighlightedContentItem model. '
'Do you add a foreignkey to '
'your HighlightedContent model with a valid related_name ?')
class_name = smart_bytes(highlighted_content_item_model.__name__ + 'Inline')
bases = (HighlightedContentItemInlineBase, )
attributes = {'model': highlighted_content_item_model}
inline_class = type(class_name.decode("utf-8"), bases, attributes)
setattr(self.__class__, 'highlighted_content_item_inline_class', inline_class)
if self.__class__.highlighted_content_item_inline_class not in self.inlines:
self.inlines.append(self.__class__.highlighted_content_item_inline_class)
super(HighlightedContentPluginBase, self).__init__(*args, **kwargs)
def get_render_template(self, context, instance, placeholder):
if not hasattr(self, '_render_template'):
kwargs = {'app_label': self.model._meta.app_label,
'model_name': self.model._meta.model_name}
templates = ['%(app_label)s/%(model_name)s/highlighted_content.html' % kwargs,
'%(app_label)s/highlighted_content.html' % kwargs,
'cms_highlighted_content/highlighted_content.html' % kwargs]
self._render_template = select_template(templates).template.name
return self._render_template
def get_items(self, context, instance, placeholder):
return instance.get_items()
def render(self, context, instance, placeholder):
items = self.get_items(context, instance, placeholder)
context.update({