Skip to content


Repository files navigation


The debugtools module offers some easy to use debugging utilities to assist Django development. It features:

  • A template tag to print context.
  • A XViewMiddleware variation to see which view and template was used to render a page.
  • A panel for django-debug-toolbar to show which view and template was used to render a page.
  • A jQuery debug() function.


First install the module, preferably in a virtual environment. It can be installed from PyPI:

pip install django-debugtools

Or the current folder can be installed:

pip install .


Add the module to the installed apps:


As of Django 1.9, either use {% load debugtools_tags %} or add the following to the settings:

        'BACKEND': 'django.template.backends.django.DjangoTemplates',
        'DIRS': [],
        'APP_DIRS': True,
        'OPTIONS': {
            'context_processors': [
                # ...
           'builtins': [                                     # Add this section
                "debugtools.templatetags.debugtools_tags",   # Add this line

Or, when you use a settings file:

TEMPLATES[0]['OPTIONS']['builtins'] += [
    "debugtools.templatetags.debugtools_tags",  # enables {% print %}


Print Template Tag

In Django templates, the following code can be used:

{% print variable1 variable2 %}

This will print out the specific variables, in case of {% print original %}:

When no variables are given (e.g. {% print %}), all context variables are displayed:

The template context variables are printed in a customized pprint.pformat format, for easy reading. Note no {% load %} tag is needed; the {% print %} function is added to the template builtins for debugging convenience.

Print Queries template tag

For convenience, there is also a {% print_queries %} tag, based on

For more sophisticated debugging, you may want to use the django-debug-toolbar for this job.

Debug Toolbar Panel

Add the following settings to your django-debug-toolbar configuration:

    'debugtools.panels.ViewPanel',    # Add this one

jQuery debug print

Add the following to the page:

<script type="text/javascript" src="{{ STATIC_URL }}debugtools/jquery.debug.js"></script>

Now you can print the jQuery selector context to the console:


This will print the matched <li> elements in the console, among with the current jQuery selector. Optionally, a prefix can be included in the debug() call:

$("#foo").debug("at baz: ").addClass('bar');

X-View Middleware

As alternative to the django-debug-toolbar panel, you can also add the XViewMiddleware. Add the following setting:



All requests from the internal IP, or made by the admin user will have a X-View header and X-View-Template header. In the Firebug console, or Chrome web inspector, you can see which view and template handled the current request:

The alternative templates are also displayed, in case the view allows the template to be overwritten with a different name.

Print tag examples

For example, when using the following code:

{% print original %}

{% print inline_admin_formset %}

{% for inline_admin_form in inline_admin_formset %}
    {% print inline_admin_form %}
    {% print %}
{% endfor %}

It prints the context values, which helps to learn a lot about the template context:

This makes it much easier to understand what the code provides to templates.