from django.db.models import Model from django.utils.translation import get_language from content_editor import renderer as content_editor from feincms3.renderer import Regions, TemplatePluginRenderer class MultilingualRegions(Regions): def cache_key(self, region): return '%s-%s' % (get_language(), super().cache_key(region)) class ContentPluginRenderer(TemplatePluginRenderer): def register(self): """ Used as decorator Usage: @renderer.register() class TextPlugin(ModelPlugin): pass """ def _renderer_wrapper(plugin_class): plugin_class.register_with_renderer(self) return plugin_class return _renderer_wrapper def regions(self, item, inherit_from=None, regions=MultilingualRegions): return super().regions(item, inherit_from=inherit_from, regions=regions) # Experimental implementation class PluginRenderer(content_editor.PluginRenderer): def register(self, plugin, renderer=None): if not renderer: # Might raise an AttributeError renderer = getattr(plugin, 'render') self._renderers[plugin] = renderer def get_registered_plugins(self, exclude=[]): registered_plugins = list(self._renderers.keys()) registered_plugins.remove(Model) return [p for p in registered_plugins if p not in exclude] def get_admin_inlines(self, exclude=[]): plugins = self.get_registered_plugins(exclude) return [p.admin_inline() for p in plugins]