Skip to main content

Render a particular block from a template to a string.

Project description

Django Render Block

https://img.shields.io/pypi/v/django-render-block.svg https://github.com/clokep/django-render-block/actions/workflows/main.yml/badge.svg

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 4.2, 5.1, and 5.2 on Python 3.9, 3.10, 3.11, 3.12, and 3.13 (see the Django documentation for which versions of Python are supported by particular Django versions).

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'))
'block1 from test2'
>>> print(render_block_to_string('test2.html', 'block2'))
'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'}))
'Render this test!'

API Reference

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

render_block_to_string(template_name, block_name, context=None, request=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. A Context object can be provided for Django templates.

context is optional. If not provided, an empty context will be used.

request

The request object used to render the template.

request is optional and works only for Django templates. If both context and request are provided, a RequestContext will be used instead of a Context.

Similarly there is a render_block function which returns an HttpResponse with the content sent to the result of render_block_to_string with the same parameters.

render_block(request, template_name, block_name, context=None, content_type="text/html", status=200)

request

The request object used to render the template.

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. A Context object can be provided for Django templates.

context is optional. If not provided, an empty context will be used.

content_type

A str content type for the HTTP response.

status

An int HTTP status code for the HTTP response.

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:

Changelog

0.11 (May 12, 2025)

Improvements

  • Add a new render_block function which returns a HttpResponse with the content set to the result of calling render_block_to_string(). Contributed by @gogognome. (#60)

Bugfixes

Maintenance

  • Include tests in sdist distribution. Contributed by @Natureshadow) (#30)

  • Update linters and switch to ruff. (#64)

  • Support Python 3.13. (#62)

  • Drop support for Python 3.8. (#62, #65)

  • Support Django 5.2. (#62)

  • Drop support for Django 5.0. (#62, #65)

0.10 (July 15, 2024)

No changes from 0.10b1.

0.10b1 (July 1, 2024)

Bugfixes

  • Fixes exception propagation when rendering templates. Contributed by @yaakovLowenstein. (#52)

  • Fix rendering blocks over multiple extended templates. (#56)

Maintenance

  • Support Python 3.11 and 3.12. (#44, #55)

  • Drop support for Python 3.7. (#44)

  • Support Django 4.2, 5.0 and 5.1. (#44, #55)

  • Drop support for Django < 3.2; Django 4.0; Django 4.1. (#44, #55)

  • Add type hints and configure mypy. (#54)

0.9.2 (October 18, 2022)

Maintenance

0.9.1 (December 15, 2021)

Maintenance

  • Support Python 3.10. (#33)

  • Fixed a packaging issue where the generated wheels were empty. Contributed by @cordery. (#35)

0.9 (December 14, 2021)

Maintenance

  • Drop support for Django 3.0. (#31)

  • Support Django 3.2 and 4.0. (#27, #31)

  • Switch continuous integration to GitHub Actions. (#26, #28)

  • Changed packaging to use setuptools declarative config in setup.cfg. (#32)

0.8.1 (October 15, 2020)

Bugfixes

  • Fixes a regression in v0.8 where a Context could not be re-used. Contributed by @evanbrumley. (#25)

0.8 (October 6, 2020)

Bugfixes

  • render_block_to_string now forwards the Context passed as context parameter. Contributed by @bblanchon. (#21)

Maintenance

  • Drop support for Python 3.5, support Python 3.9. (#22)

0.7 (July 13, 2020)

Maintenance

  • Drop support for Django < 2.2. (#18)

  • Support Django 3.0 and 3.1. (#18, #20)

  • Drop support for Python 2.7. (#19)

  • Support Python 3.8. (#18)

0.6 (May 8, 2019)

Improvements

  • render_block_to_string now optionally accepts a request parameter. If given, a RequestContext instead of a Context is used when rendering with the Django templating engine. Contributed by @vintage. (#15)

Maintenance

  • Support Django 1.11, 2.1, and 2.2. (#9, #11, #17)

  • Support Python 2.7, 3.5, 3.6, and 3.7. (#9, #17)

  • Fix rendering of README on PyPI. Contributed by @mixxorz. (#10)

0.5 (September 1, 2016)

Bugfixes

  • Fixes a major issue with inheriting templates and rendering a block found in the parent template, but overwriting part of it in the child template. (#8)

0.4 (August 4, 2016)

Improvements

  • Initial support for using the Jinja2 templating engine. See README for caveats. (#3)

Maintenance

  • Support Django 1.10. (#5)

  • Support Python 3. (#6)

0.3.1 (June 1, 2016)

Maintenance

  • Refactoring to make more generic (for potentially supporting multiple templating engines).

0.3 (May 27, 2016)

  • Largely rewritten.

  • Support Django 1.8 and 1.9:

    • Guards against different template backends.

    • Uses internal APIs for each node.

    • Removed context_instance parameter.

    • Support for calling {{ block.super }}.

0.2.2 (January 10, 2011)

0.2.1 (August 27, 2010)

0.2 (August 4, 2008)

  • Updated version from Django Snippet 942 by zbyte64.

  • Improves include:

    1. Simpler/better handling of “extends” block tag

    2. Searches If/Else blocks

    3. Less code

    4. Allow list of templates to be passed which is closer to the behavior of render_to_response

0.1 (May 22, 2008)

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

django_render_block-0.11.tar.gz (12.4 kB view details)

Uploaded Source

Built Distribution

django_render_block-0.11-py3-none-any.whl (9.7 kB view details)

Uploaded Python 3

File details

Details for the file django_render_block-0.11.tar.gz.

File metadata

  • Download URL: django_render_block-0.11.tar.gz
  • Upload date:
  • Size: 12.4 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.1.0 CPython/3.13.3

File hashes

Hashes for django_render_block-0.11.tar.gz
Algorithm Hash digest
SHA256 17886dd3bff222fe8a2f019509c6c53e0e4a38fe684e80d48e8697a879e1301b
MD5 ad15ae7038d858b8f8e586724778ccc5
BLAKE2b-256 6b2f588cf58f7b37ab3b7994727d590381aed747173ef5670457c798518621dc

See more details on using hashes here.

File details

Details for the file django_render_block-0.11-py3-none-any.whl.

File metadata

File hashes

Hashes for django_render_block-0.11-py3-none-any.whl
Algorithm Hash digest
SHA256 e6a7161393fb59ee803ab0a97ce96286897abafa42835215e019b47ebc442727
MD5 3dcee09b359aa37a312d50106502835f
BLAKE2b-256 efeff80dddb0e05887cda30b7c8140a2b0caa957d31d68fcfec84cb445d792ef

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page