templatetags: add block tag to insert blurp variables into the current context

This does not work with ajax blurp for now, you will only get
synchronous loading.
This commit is contained in:
Benjamin Dauvergne 2014-07-02 09:58:17 +02:00
parent 0d6ab6fbbd
commit fce84e9251
2 changed files with 22 additions and 1 deletions

View File

@ -7,6 +7,7 @@ from .. import utils
register = template.Library()
@register.tag
class RenderBlurp(Tag):
name = 'render_blurp'
options = Options(
@ -23,4 +24,18 @@ class RenderBlurp(Tag):
if not hasattr(template, 'render'):
template = template.Template(template)
return template.render(context)
register.tag(RenderBlurp)
@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

View File

@ -24,3 +24,9 @@ def resolve_renderer(name):
module_name, class_name = instance['class'].rsplit('.', 1)
module = import_module(module_name)
return getattr(module, class_name)(name, instance)
def insert_blurp_in_context(name, context):
renderer = resolve_renderer(name)
if not renderer:
return ''
return renderer.render(context)