63 lines
2.2 KiB
Python
63 lines
2.2 KiB
Python
import logging
|
|
|
|
from django.utils.importlib import import_module
|
|
from django.utils.translation import ugettext_lazy as _
|
|
from django.template.loader import get_template
|
|
|
|
from . import app_settings
|
|
|
|
def renderer_description(renderer):
|
|
if 'name' in renderer.config:
|
|
if 'template_name' in renderer.config:
|
|
return _('{name} using template {template}').format(
|
|
name=renderer.config['name'],
|
|
template=renderer.config['template_name'])
|
|
else:
|
|
return renderer.config['name']
|
|
|
|
def renderers_choices():
|
|
for slug in app_settings.RENDERERS:
|
|
renderer = resolve_renderer(slug)
|
|
yield slug, renderer_description(renderer) or slug
|
|
|
|
def create_renderer(name, instance):
|
|
'''Create a renderer instance of given name from a settings dictionary'''
|
|
module_name, class_name = instance['class'].rsplit('.', 1)
|
|
module = import_module(module_name)
|
|
return getattr(module, class_name)(name, instance)
|
|
|
|
def resolve_renderer(name):
|
|
'''Create a renderer instance from slug name of its settings'''
|
|
instance = app_settings.RENDERERS.get(name)
|
|
if instance:
|
|
return create_renderer(name, instance)
|
|
|
|
def insert_blurp_in_context(name, context):
|
|
renderer = resolve_renderer(name)
|
|
if not renderer:
|
|
return ''
|
|
return renderer.render(context)
|
|
|
|
def render_blurp(context, slug, ajax=True):
|
|
logger = logging.getLogger(__name__)
|
|
renderer = resolve_renderer(slug)
|
|
if not renderer:
|
|
logger.warning('renderer %s does not exist', slug)
|
|
return None, None
|
|
# Ajax rendering is canceled in the ajax view
|
|
ajax = ajax and renderer.use_ajax(context)
|
|
if ajax:
|
|
request = context.get('request')
|
|
context['slug'] = renderer.slug
|
|
context['ajax_refresh'] = renderer.config.get('ajax_refresh', 0)
|
|
if request.GET:
|
|
context['plugin_args'] = '?{0}'.format(request.GET.urlencode())
|
|
# hack alert !!
|
|
template = get_template('cmsplugin_blurp/ajax.html', context)
|
|
else:
|
|
template = renderer.render_template()
|
|
if not hasattr(template, 'render'):
|
|
template = template.Template(template)
|
|
context = renderer.render(context)
|
|
return template, context
|