Skip to content

Render the content of a specific block tag from a Django template.

License

Notifications You must be signed in to change notification settings

aericson/django-render-block

 
 

Repository files navigation

Django Render Block

https://travis-ci.org/clokep/django-render-block.svg?branch=master

Render the content of a specific block tag from a Django template. Works for arbitrary template inheritance, even if a block is defined in the child template but not in the parent. Generally it works like render_to_string from Django, but allows you to specify a block to render.

Features

  • Render a specific block from a template
  • Fully supports the Django templating engine
  • Partially supports the Jinja2 engine: it does not currently process the extends tag.

Requirements

Django Render Block supports Django 1.8 and 1.9.

Examples

In test1.html:

{% block block1 %}block1 from test1{% endblock %}
{% block block2 %}block2 from test1{% endblock %}

In test2.html:

{% extends 'test1.html' %}
{% block block1 %}block1 from test2{% endblock %}

And from the Python shell:

>>> from render_block import render_block_to_string
>>> print render_block_to_string('test2.html', 'block1')
u'block1 from test2'
>>> print render_block_to_string('test2.html', 'block2')
u'block2 from test1'

It can also accept a context as a dict (just like render_to_string), in test3.html:

{% block block3 %}Render this {{ variable }}!{% endblock %}

And from Python:

>>> print render_block_to_string('test3.html', 'block3', {'variable': 'test'})
u'Render this test!'

API Reference

The API is simple and attempts to mirror the built-in render_to_string API.

render_block_to_string(template_name, block_name, context=None)

template_name
The name of the template to load and render. If it’s a list of template names, Django uses select_template() instead of get_template() to find the template.
block_name
The name of the block to render from the above template.
context

A dict to be used as the template’s context for rendering.

context is now optional. An empty context will be used if it isn’t provided.

Exceptions

Like render_to_string this will raise the following exceptions:

TemplateDoesNotExists
Raised if the template(s) specified by template_name cannot be loaded.
TemplateSyntaxError
Raised if the loaded template contains invalid syntax.

There are also two additional errors that can be raised:

BlockNotFound
Raised if the block given by block_name does not exist in the template.
UnsupportedEngine
Raised if a template backend besides the Django backend is used.

Contributing

If you find a bug or have an idea for an improvement to Django Render Block, please file an issue or provide a pull request! Check the list of issues for ideas of what to work on.

Attribution

This is based on a few sources:

About

Render the content of a specific block tag from a Django template.

Resources

License

Stars

Watchers

Forks

Packages

No packages published

Languages

  • Python 95.4%
  • HTML 4.6%