This repository has been archived on 2023-02-21. You can view files and clone it, but cannot push or open issues or pull requests.
cmsplugin-blurp/src/cmsplugin_blurp/templatetags/blurp_tags.py

56 lines
1.5 KiB
Python

import logging
from django import template
from django.conf import settings
from django.utils.html import escape
from classytags.arguments import Argument
from classytags.core import Options, Tag
from .. import utils
register = template.Library()
@register.tag
class RenderBlurp(Tag):
name = 'render_blurp'
options = Options(
Argument('name', resolve=False),
)
def render_tag(self, context, name):
renderer = utils.resolve_renderer(name)
if not renderer:
return ''
template = renderer.render_template()
context = renderer.render(context)
try:
if not hasattr(template, 'render'):
template = template.Template(template)
return template.render(context)
except Exception, e:
logging.getLogger(__name__).exception('error while rendering %s',
renderer)
msg = ''
if settings.TEMPLATE_DEBUG:
msg += 'error while rendering %s: %s' % (renderer, e)
msg = '<pre>%s</pre>' % escape(msg)
return msg
@register.tag
class BlurpNode(Tag):
'''Insert content generated from a blurp block and render inside template'''
name = 'blurp'
options = Options(
Argument('name'),
blocks=[('endblurp', 'nodelist')])
def render_tag(self, context, name, nodelist):
context.push()
utils.insert_blurp_in_context(name, context)
output = self.nodelist.render(context)
context.pop()
return output