def reuse(context, block_list, **kwargs): ''' Allow reuse of a block within a template. {% reuse '_myblock' foo=bar %} If passed a list of block names, will use the first that matches: {% reuse list_of_block_names .... %} ''' try: block_context = context.render_context[BLOCK_CONTEXT_KEY] except KeyError: block_context = BlockContext() if not isinstance(block_list, (list, tuple)): block_list = [block_list] for block in block_list: block = block_context.get_block(block) if block: break else: return '' context.update(kwargs) try: return block.render(context) finally: context.pop()
def reuse(context, block_list, **kwargs): ''' Allow reuse of a block within a template. {% reuse '_myblock' foo=bar %} If passed a list of block names, will use the first that matches: {% reuse list_of_block_names .... %} ''' try: block_context = context.render_context[BLOCK_CONTEXT_KEY] except KeyError: block_context = BlockContext() blocks = { n.name: n for n in context.template.nodelist.get_nodes_by_type(BlockNode) } block_context.add_blocks(blocks) if not isinstance(block_list, (list, tuple)): block_list = [block_list] for name in block_list: block = block_context.get_block(name) if block is not None: break if block is None: return '' context.update(kwargs) try: return block.render(context) finally: context.pop()