Render the content of a specific block tag from a Django template.
Switch branches/tags
Clone or download
Fetching latest commit…
Cannot retrieve the latest commit at this time.
Permalink
Failed to load latest commit information.
render_block
tests
.gitignore
.travis.yml
CHANGELOG.rst
LICENSE
MANIFEST.in
README.rst
manage.py
requirements.txt
setup.cfg
setup.py
tox.ini

README.rst

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, 1.9, 1.10, 1.11, and 2.0.

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: