Panels

The Django Debug Toolbar ships with a series of built-in panels. In addition, several third-party panels are available.

Default built-in panels

The following panels are enabled by default.

Version

Path: debug_toolbar.panels.versions.VersionsPanel

Shows versions of Python, Django, and installed apps if possible.

Timer

Path: debug_toolbar.panels.timer.TimerPanel

Request timer.

Settings

Path: debug_toolbar.panels.settings.SettingsPanel

A list of settings in settings.py.

Headers

Path: debug_toolbar.panels.headers.HeadersPanel

This panels shows the HTTP request and response headers, as well as a selection of values from the WSGI environment.

Note that headers set by middleware placed before the debug toolbar middleware in MIDDLEWARE_CLASSES won’t be visible in the panel. The WSGI server itself may also add response headers such as Date and Server.

Request

Path: debug_toolbar.panels.request.RequestPanel

GET/POST/cookie/session variable display.

SQL

Path: debug_toolbar.panels.sql.SQLPanel

SQL queries including time to execute and links to EXPLAIN each query.

Template

Path: debug_toolbar.panels.templates.TemplatesPanel

Templates and context used, and their template paths.

Static files

Path: debug_toolbar.panels.staticfiles.StaticFilesPanel

Used static files and their locations (via the staticfiles finders).

Cache

Path: debug_toolbar.panels.cache.CachePanel

Cache queries. Is incompatible with Django’s per-site caching.

Signal

Path: debug_toolbar.panels.signals.SignalsPanel

List of signals, their args and receivers.

Logging

Path: debug_toolbar.panels.logging.LoggingPanel

Logging output via Python’s built-in logging module.

Redirects

Path: debug_toolbar.panels.redirects.RedirectsPanel

When this panel is enabled, the debug toolbar will show an intermediate page upon redirect so you can view any debug information prior to redirecting. This page will provide a link to the redirect destination you can follow when ready.

Since this behavior is annoying when you aren’t debugging a redirect, this panel is included but inactive by default. You can activate it by default with the DISABLE_PANELS configuration option.

Non-default built-in panels

The following panels are disabled by default. You must add them to the DEBUG_TOOLBAR_PANELS setting to enable them.

Profiling

Path: debug_toolbar.panels.profiling.ProfilingPanel

Profiling information for the processing of the request.

If the debug_toolbar.middleware.DebugToolbarMiddleware is first in MIDDLEWARE_CLASSES then the other middlewares’ process_view methods will not be executed. This is because ProfilingPanel.process_view will return a HttpResponse which causes the other middlewares’ process_view methods to be skipped.

Note that the quick setup creates this situation, as it inserts DebugToolbarMiddleware first in MIDDLEWARE_CLASSES.

If you run into this issues, then you should either disable the ProfilingPanel or move DebugToolbarMiddleware to the end of MIDDLEWARE_CLASSES. If you do the latter, then the debug toolbar won’t track the execution of other middleware.

Third-party panels

Note

Third-party panels aren’t officially supported!

The authors of the Django Debug Toolbar maintain a list of third-party panels, but they can’t vouch for the quality of each of them. Please report bugs to their authors.

If you’d like to add a panel to this list, please submit a pull request!

Flamegraph

URL: https://github.com/23andMe/djdt-flamegraph

Path: djdt_flamegraph.FlamegraphPanel

Generates a flame graph from your current request.

Haystack

URL: https://github.com/streeter/django-haystack-panel

Path: haystack_panel.panel.HaystackDebugPanel

See queries made by your Haystack backends.

HTML Tidy/Validator

URL: https://github.com/joymax/django-dtpanel-htmltidy

Path: debug_toolbar_htmltidy.panels.HTMLTidyDebugPanel

HTML Tidy or HTML Validator is a custom panel that validates your HTML and displays warnings and errors.

Inspector

URL: https://github.com/santiagobasulto/debug-inspector-panel

Path: inspector_panel.panels.inspector.InspectorPanel

Retrieves and displays information you specify using the debug statement. Inspector panel also logs to the console by default, but may be instructed not to.

Line Profiler

URL: https://github.com/dmclain/django-debug-toolbar-line-profiler

Path: debug_toolbar_line_profiler.panel.ProfilingPanel

This package provides a profiling panel that incorporates output from line_profiler.

Memcache

URL: https://github.com/ross/memcache-debug-panel

Path: memcache_toolbar.panels.memcache.MemcachePanel or memcache_toolbar.panels.pylibmc.PylibmcPanel

This panel tracks memcached usage. It currently supports both the pylibmc and memcache libraries.

MongoDB

URL: https://github.com/hmarr/django-debug-toolbar-mongo

Path: debug_toolbar_mongo.panel.MongoDebugPanel

Adds MongoDB debugging information.

Neo4j

URL: https://github.com/robinedwards/django-debug-toolbar-neo4j-panel

Path: neo4j_panel.Neo4jPanel

Trace neo4j rest API calls in your django application, this also works for neo4django and neo4jrestclient, support for py2neo is on its way.

Pympler

URL: https://pythonhosted.org/Pympler/django.html

Path: pympler.panels.MemoryPanel

Shows process memory information (virtual size, resident set size) and model instances for the current request.

Request History

URL: https://github.com/djsutho/django-debug-toolbar-request-history

Path: ddt_request_history.panels.request_history.RequestHistoryPanel

Switch between requests to view their stats. Also adds support for viewing stats for ajax requests.

Sites

URL: https://github.com/elvard/django-sites-toolbar

Path: sites_toolbar.panels.SitesDebugPanel

Browse Sites registered in django.contrib.sites and switch between them. Useful to debug project when you use django-dynamicsites which sets SITE_ID dynamically.

Template Profiler

URL: https://github.com/node13h/django-debug-toolbar-template-profiler

Path: template_profiler_panel.panels.template.TemplateProfilerPanel

Shows template render call duration and distribution on the timeline. Lightweight. Compatible with WSGI servers which reuse threads for multiple requests (Werkzeug).

Template Timings

URL: https://github.com/orf/django-debug-toolbar-template-timings

Path: template_timings_panel.panels.TemplateTimings.TemplateTimings

Displays template rendering times for your Django application.

User

URL: https://github.com/playfire/django-debug-toolbar-user-panel

Path: debug_toolbar_user_panel.panels.UserPanel

Easily switch between logged in users, see properties of current user.

VCS Info

URL: https://github.com/giginet/django-debug-toolbar-vcs-info

Path: vcs_info_panel.panels.GitInfoPanel

Displays VCS status (revision, branch, latest commit log and more) of your Django application.

uWSGI Stats

URL: https://github.com/unbit/django-uwsgi

Path: django_uwsgi.panels.UwsgiPanel

Displays uWSGI stats (workers, applications, spooler jobs and more).

API for third-party panels

Third-party panels must subclass Panel, according to the public API described below. Unless noted otherwise, all methods are optional.

Panels can ship their own templates, static files and views. There is no public CSS API at this time.

class debug_toolbar.panels.Panel(*args, **kwargs)

Base class for panels.

nav_title

Title shown in the side bar. Defaults to title.

nav_subtitle

Subtitle shown in the side bar. Defaults to the empty string.

has_content

True if the panel can be displayed in full screen, False if it’s only shown in the side bar. Defaults to True.

title

Title shown in the panel when it’s displayed in full screen.

Mandatory, unless the panel sets has_content to False.

template

Template used to render content.

Mandatory, unless the panel sets has_content to False or overrides attr:content`.

content

Content of the panel when it’s displayed in full screen.

By default this renders the template defined by template. Statistics stored with record_stats() are available in the template’s context.

classmethod get_urls()

Return URLpatterns, if the panel has its own views.

enable_instrumentation()

Enable instrumentation to gather data for this panel.

This usually means monkey-patching (!) or registering signal receivers. Any instrumentation with a non-negligible effect on performance should be installed by this method rather than at import time.

Unless the toolbar or this panel is disabled, this method will be called early in DebugToolbarMiddleware.process_request. It should be idempotent.

disable_instrumentation()

Disable instrumentation to gather data for this panel.

This is the opposite of enable_instrumentation().

Unless the toolbar or this panel is disabled, this method will be called late in DebugToolbarMiddleware.process_response. It should be idempotent.

record_stats(stats)

Store data gathered by the panel. stats is a dict.

Each call to record_stats updates the statistics dictionary.

get_stats()

Access data stored by the panel. Returns a dict.

process_request(request)

Like process_request in Django’s middleware.

Write panel logic related to the request there. Save data with record_stats().

process_view(request, view_func, view_args, view_kwargs)

Like process_view in Django’s middleware.

Write panel logic related to the view there. Save data with record_stats().

process_response(request, response)

Like process_response in Django’s middleware. This is similar to generate_stats, but will be executed on every request. It should be used when either the logic needs to be executed on every request or it needs to change the response entirely, such as RedirectsPanel.

Write panel logic related to the response there. Post-process data gathered while the view executed. Save data with record_stats().

Return a response to overwrite the existing response.

generate_stats(request, response)

Similar to process_response, but may not be executed on every request. This will only be called if the toolbar will be inserted into the request.

Write panel logic related to the response there. Post-process data gathered while the view executed. Save data with record_stats().

Does not return a value.

JavaScript API

Panel templates should include any JavaScript files they need. There are a few common methods available, as well as the toolbar’s version of jQuery.

djdt.close()

Triggers the event to close any active panels.

djdt.cookie.get()

This is a helper function to fetch values stored in the cookies.

Arguments:
  • key (string) – The key for the value to be fetched.
djdt.cookie.set()

This is a helper function to set a value stored in the cookies.

Arguments:
  • key (string) – The key to be used.
  • value (string) – The value to be set.
  • options (Object) – The options for the value to be set. It should contain the properties expires and path.
djdt.hide_toolbar()

Closes any panels and hides the toolbar.

djdt.jQuery()

This is the toolbar’s version of jQuery.

djdt.show_toolbar()

Shows the toolbar.