NewYour coding agent can read the release notes before it upgrades.Set up the MCP server →
PyPI · #1266 most downloaded on PyPI
A configurable set of panels that display various debug information about the current request/response.
Last release 1 months ago
01 Sep 2026
Ships fairly regularly
a new release about every 2 months
Most releases are documented
notes for 51 of the last 60 stable releases
Nothing withdrawn
no release was ever pulled
18 years old
84 releases · first in 2009
Refreshed the toolbar's visual design with self-hosted Alef (panel titles) and Geist (body text) fonts, an updated color palette, and per-panel naviga
RBNX Studio <https://www.rbnx.studio>_.aria-expanded on panel toggles, an aria-live status for history refreshes, and WCAG 2.1 AA contrast in both themes.USE_SHADOW_DOM setting, which was added in 7.0.0 but was missing from the configuration documentation, and added test coverage for it.cache.get() by @Harsh3006 in #2418Full Changelog: 7.1.1...8.0.0
One column per quarter.
Serialize TaskResult in the Tasks panel to accommodate the storage mechanism.
Full Changelog: 7.1.0...7.1.1
Silence the MiddlewareMixin deprecation warning explicitly by @matthiask in #2416
django.tasks, Django 6.0+). On older versions of Django, the panel explains that upgrading is required.show_toolbar_with_docker on Docker runtimes such as OrbStack that can resolve host.docker.internal to an address outside the container network.Full Changelog: 7.0.0...7.1.0
django.tasks, Django 6.0+). On
older versions of Django, the panel explains that upgrading is required.show_toolbar_with_docker on Docker runtimes such as OrbStack that
can resolve host.docker.internal to an address outside the container
network.cache.get()
calls with a supplied default value, while documenting the remaining
ambiguity when a cached value equals the supplied default.Updated tox configuration to treat DeprecationWarning , ResourceWarning , and PendingDeprecationWarning as errors.
This release features a change to use the shadow DOM. If a project is customizing the Django Debug Toolbar theme via variables a change will be required.
USE_SHADOW_DOM.#djDebug, and custom panels that rely on external styles or DOM lookups reaching into the toolbar will need updates to work with the shadow DOM.ROOT_URLCONF is not defined.SQLParseError is raised, the SQL panel now automatically disables grouping and retries formatting, preventing crashes with large queries.esupgrade.DeprecationWarning, ResourceWarning, and PendingDeprecationWarning as errors.SHOW_TOOLBAR_CALLBACK needing to respect django.conf.settings.DEBUG to match debug_toolbar_urls.expires calculation in djdt.cookie.set.CULL_PROBABILITY in Django 6.2 in tests.SELECT statements.BinaryField) and GeoDjango PostGIS geometry parameters. EWKB geometry adapters are now serialized and reconstructed so that Select and Explain work correctly on spatial queries.ROOT_URLCONF is not defined by @scott-8 in #2342Full Changelog: 6.3.0...7.0.0
Updated RedirectsPanel to emit the deprecation warning when it’s used rather than on instantiation.
py.typed file, to make types available downstream by @brianhelba in #2314CacheStore, a store that uses Django's cache framework by @robhudson in #2304requirements_dev.txt file for pyproject.toml support with dependency groups.py.typed marker file.RedirectsPanel to emit the deprecation warning when it’s used rather than on instantiation.CachePanel so the cache patching is only applied once.debug_toolbar.store.CacheStore for storing toolbar data using Django’s cache framework. This provides persistence without requiring database migrations, and works with any cache backend (Memcached, Redis, database, file-based, etc.).CACHE_BACKEND and CACHE_KEY_PREFIX settings to configure the CacheStore.Full Changelog: 6.2.0...6.3.0
Deprecate RedirectsPanel in favor of the HistoryPanel by @JohananOppongAmoateng in #2223
DebugToolbarMiddleware call method by @rnazali in #2283Full Changelog: 6.1.0...6.2.0
RedirectsPanel in favor of HistoryPanel for viewing
toolbar data from redirected requests.debug_toolbar.store.DatabaseStore with SKIP_TOOLBAR_QUERIES.TestCase.assertNumQueries works.Added a note about the default password in make example by @abdibaker in #2180
See change log here
Commits:
debug_toolbar_urls to inside of … by @Lidoca in #2174Full Changes: 6.0.0...6.1.0
make example.debug_toolbar.urls to within the if
statement's scope on the installation documentation.StoredDebugToolbar.from_store to always create a panel key and
class instance, regardless if any data was generated.CommunityPanel containing links to documentation and resources.postgis version to 17-3.5.force_str) to render
"Django Debug Toolbar was unable to parse value." when there's a decoding
error.debug_toolbar.store.DatabaseStore
is being used. This may change in the future.debug_toolbar.HistoryEntry as a model unless
debug_toolbar.store.DatabaseStore is being used. This may change in the
future.If there are hooks into the internals of the toolbar, such as DebugToolbar.store_id then it will be backwards incompatible.
The v6.0.0 release of Django Debug Toolbar significantly revamps how panels for the toolbar work. Each panel will now persist its data in a store. A store can either be backed by various backends. The toolbar will support a memory and database backend to start.
The toolbar is now using Django's SafeExceptionReporterFilter.cleanse_setting() function to filter out sensitive information. Some data will be replaced with "********************". This is because the toolbar could be configured to write the request information to a persistent store such as a cache or database.
Django applications with basic installations are backwards compatible with this change. If there are hooks into the internals of the toolbar, such as DebugToolbar.store_id then it will be backwards incompatible.
Third-party panels will need updating. Any data that is stored in record_stats will need to be fetched back out from self.get_stats() before being able to be rendered. This is to support loading an instance of the toolbar from persisted data. A simple example of this transition can be found in debug_toolbar/panels/cache.py in PR 2138
RuntimeError: Model class debug_toolbar.models.HistoryEntry doesn't declare an explicit app_label and isn't in an application in INSTALLED_APPS, you need to remove the reference to the toolbar's urls in your urls.py file and MIDDLEWARE setting when the toolbar isn't in INSTALLED_APPSrecord_stats and use self.get_stats() to fetch data for renderingTOOLBAR_STORE_CLASS for more infoThe Django Debug Toolbar is a popular package we did not want to block the community from pursuing the async path for Django applications. Writing the request data to a store better positions the toolbar for async projects. It also opens the door for it being usable in production as well with API integrations.
Full Changelog: 5.2.0...6.0.0
Thank you to all the contributors who made this release possible. Thank you to @robhudson, @matthiask, @tim-schilling, @salty-ivy and @dr-rompecabezas for their support, development and reviews of the serializable toolbar changes. A special shout-out to @matthiask for leading the Djangonaut Space Session 4 team of @dr-rompecabezas, @andoriyaprashant and @blingblin-g.
show_toolbar_with_docker function to check Docker host IP address
when running inside Docker containers.BaseStore interface for request storage mechanisms.TOOLBAR_STORE_CLASS to configure the request
storage mechanism. Defaults to debug_toolbar.store.MemoryStore.store_id properties to request_id and Toolbar.store to
Toolbar.init_store.Panel instances with stored stats via
Panel.load_stats_from_store.Toolbar._store for the get_store() class.StoredDebugToolbar that support creating an instance of the
toolbar representing an old request. It should only be used for fetching
panels' contents.raw_params from query data.djdt_query_id. The SQL forms now reference
this id and avoid passing SQL to be executed.SQLPanel.content.Panel.panel_id a class member.Panel.get_stats() to load content
to render. Specifically for Panel.title and Panel.nav_title.debug_toolbar.store.DatabaseStore for persistent debug data
storage.Enhance RedirectsPanel with customizable redirect response hook by @blingblin-g in #2104
Full Changelog: 5.1.0...5.2.0
DEFAULT_THEME setting, we should always default to
system-level defaults where possible.djade <https://github.com/adamchainz/djade>__ to format Django
templates.Update version for sigstore action to full version. by @tim-schilling in #2056
Full Changelog: 5.0.1...5.1.0
SHOW_TOOLBAR_CALLBACK function with sync_to_async
or async_to_sync to allow sync/async compatibility.require_toolbar decorator compatible to async views.CONTRIBUTING.md.make help) to get a quick overview
of each target.window.fetch function
with missing exception handling.Toolbar().csp_nonce.There were no functional changes in this version.
There were no functional changes in this version.
Full Changelog: 5.0.0...5.0.1
Please note that Django Debug Toolbar has now moved into the Django Commons organization.
Please note that Django Debug Toolbar has now moved into the Django Commons organization.
str static file values.Google Summer of Code Project 2024 <https://summerofcode.withgoogle.com/programs/2024/projects/iXVvyGYp>__.LoginRequiredMiddleware introduced in Django 5.1.UNION queries on PostgreSQL.FORCE_SCRIPT_NAME was set.RedirectsPanel to be async compatible.FORCE_SCRIPT_NAME by @dmartin in https://github.com/django-commons/django-debug-toolbar/pull/1970DEBUG=True in async middleware compatibility tests by @salty-ivy in https://github.com/django-commons/django-debug-toolbar/pull/1977StaticFilesPanel by @salty-ivy in https://github.com/django-commons/django-debug-toolbar/pull/1983HistoryPanel by @salty-ivy in https://github.com/django-commons/django-debug-toolbar/pull/1991SQLPanel by @salty-ivy in https://github.com/django-commons/django-debug-toolbar/pull/1993This release contains the changes for async compatibility for the majority of panels. This is the result of the Google Summer of Code project by @salty-ivy. A massive thank you 💚 and a round of applause 👏 is due to Aman!
Full Changelog: https://github.com/django-commons/django-debug-toolbar/compare/4.4.6...5.0.0
str static file values.Please see everything under 5.0.0-alpha as well.
Version 5.0 does not contain any backwards incompatible changes. Instead it should be more compatible with async Django projects. However, the change…
Version 5.0 does not contain any backwards incompatible changes. Instead it should be more compatible with async Django projects. However, the change did require some reasonably sized changes to the middleware. This is a large enough change that we wanted it to be effectively communicated to users of the toolbar.
This release is an alpha because the async logic was tested, but we also understand that we haven't tested it in every scenario. We fully expect the project to continue to function extremely well in WSGI applications. For ASGI applications that are utilizing async, well, that's why it's an alpha 😁
FORCE_SCRIPT_NAME by @dmartin in https://github.com/jazzband/django-debug-toolbar/pull/1970DEBUG=True in async middleware compatibility tests by @salty-ivy in https://github.com/jazzband/django-debug-toolbar/pull/1977StaticFilesPanel by @salty-ivy in https://github.com/jazzband/django-debug-toolbar/pull/1983HistoryPanel by @salty-ivy in https://github.com/jazzband/django-debug-toolbar/pull/1991SQLPanel by @salty-ivy in https://github.com/jazzband/django-debug-toolbar/pull/1993This release contains the changes for async compatibility for the majority of panels. This is the result of the Google Summer of Code project by @salty-ivy. A massive thank you 💚 and a round of applause 👏 is due to Aman!
Full Changelog: https://github.com/jazzband/django-debug-toolbar/compare/4.4.6...5.0.0-alpha
Google Summer of Code Project 2024 <https://summerofcode.withgoogle.com/programs/2024/projects/iXVvyGYp>__.LoginRequiredMiddleware introduced in Django 5.1.UNION queries on PostgreSQL.FORCE_SCRIPT_NAME was set.RedirectsPanel to be async compatible.Close #1509: Revert the infinite recursion fix, Django has changed the behavior by @matthiask in https://github.com/jazzband/django-debug-toolbar/pull
Full Changelog: https://github.com/jazzband/django-debug-toolbar/compare/4.4.5...4.4.6
Fix #1951: Do not crash if the 'alerts' key doesn't exist by @matthiask in https://github.com/jazzband/django-debug-toolbar/pull/1953
Full Changelog: https://github.com/jazzband/django-debug-toolbar/compare/4.4.4...4.4.5
Check for for StreamingHttpResponse when generating stats in Alert by @danjac in https://github.com/jazzband/django-debug-toolbar/pull/1946
Full Changelog: https://github.com/jazzband/django-debug-toolbar/compare/4.4.3...4.4.4
Fix overriding font-family for both light and dark themes by @federicobond in https://github.com/jazzband/django-debug-toolbar/pull/1930
Full Changelog: https://github.com/jazzband/django-debug-toolbar/compare/4.4.2...4.4.3
iptools.IpRangeList.E001 check to likely error cases when the
SHOW_TOOLBAR_CALLBACK has changed, but the toolbar's URL
paths aren't installed.debug_toolbar_urls to
simplify installation.[pre-commit.ci] pre-commit autoupdate by @pre-commit-ci in https://github.com/jazzband/django-debug-toolbar/pull/1909
Full Changelog: https://github.com/jazzband/django-debug-toolbar/compare/4.4.1...4.4.2
INTERNAL_IPS is a list.Limit metadata version for Jazzband's release process by @tim-schilling in https://github.com/jazzband/django-debug-toolbar/pull/1916
Full Changelog: https://github.com/jazzband/django-debug-toolbar/compare/4.4...4.4.1
Render forms with as_div to silence Django 5.0 deprecation warnings.
Raised the minimum Django version to 4.2.
Automatically support Docker rather than having the developer write a workaround for INTERNAL_IPS.
Display a better error message when the toolbar's requests return invalid json.
Render forms with as_div to silence Django 5.0 deprecation warnings.
Stayed on top of pre-commit hook updates.
Added architecture documentation to help on-board new contributors.
Removed the static file path validation check in StaticFilesPanel since that check is made redundant by a similar check in Django 4.0 and later.
Deprecated the OBSERVE_REQUEST_CALLBACK setting and added check debug_toolbar.W008 to warn when it is present in DEBUG_TOOLBAR_SETTINGS.
Add a note on the profiling panel about using Python 3.12 and later about needing --nothreading
Added IS_RUNNING_TESTS setting to allow overriding the debug_toolbar.E001 check to avoid including the toolbar when running tests.
Fixed the bug causing 'djdt' is not a registered namespace and updated docs to help in initial configuration while running tests.
Added a link in the installation docs to a more complete installation example in the example app.
Added check to prevent the toolbar from being installed when tests are running.
Added test to example app and command to run the example app's tests.
Implemented dark mode theme and button to toggle the theme, introduced the DEFAULT_THEME setting which sets the default theme to use.
Dropped support for Django 4.0.
LazyObject when not already
evaluated.utils.get_name_from_obj to simulate the behavior of
django.contrib.admindocs.utils.get_view_name.ruff formatter <https://astral.sh/blog/the-ruff-formatter>__.UPDATE_ON_FETCH to control whether the
toolbar automatically updates to the latest AJAX request or not.
It defaults to False.Adjusted app directories system check to allow for nested template loaders.
ruff <https://beta.ruff.rs/>__.samesite argument to
djdt.cookie.set.StaticFilesPanel to no longer use a thread collector. Instead,
it collects the used static files in a ContextVar.debug_toolbar.W007 to warn when JavaScript files are
resolving to the wrong content type.CursorWrapper class with a mixin class to support multiple
base wrapper classes.Improved SQL statement formatting performance. Additionally, fixed the indentation of CASE statements and stopped simplifying .count() queries.
Improved SQL statement formatting performance. Additionally, fixed the indentation of CASE statements and stopped simplifying .count() queries.
Added support for the new STORAGES setting in Django 4.2 for static files.
Added support for theme overrides.
Reworked the cache panel instrumentation code to no longer attempt to undo monkey patching of cache methods, as that turned out to be fragile in the presence of other code which also monkey patches those methods.
Update all timing code that used time.time() to use time.perf_counter() instead.
Made the check on request.META["wsgi.multiprocess"] optional, but defaults to forcing the toolbar to render the panels on each request. This is because it's likely an ASGI application that's serving the responses and that's more likely to be an incompatible setup. If you find that this is incorrect for you in particular, you can use the RENDER_PANELS setting to forcibly control this logic.
Dropped support for Python 3.7.
TOOLBAR_LANGUAGE setting when rendering individual panels
that are loaded via AJAX.TOOLBAR_LANGUAGE.ENABLE_STACKTRACE_LOCALS is True, the stack frames' locals dicts
will be converted to strings when the stack trace is captured rather when it
is rendered, so that the correct values will be displayed in the rendered
stack trace, as they may have changed between the time the stack trace was
captured and when it is rendered.Note: 3.8.0 was not released, use 3.8.1
Note: 3.8.0 was not released, use 3.8.1
Full Changelog: https://github.com/jazzband/django-debug-toolbar/compare/3.7...3.8.1
Added Profiling panel setting PROFILER_THRESHOLD_RATIO to give users better control over how many function calls are included. A higher value will inc
PROFILER_THRESHOLD_RATIO to give users
better control over how many function calls are included. A higher value
will include more data, but increase render time.PROFILER_CAPTURE_PROJECT_CODE to allow
users to disable the inclusion of all project code. This will be useful
to project setups that have dependencies installed under
settings.BASE_DIR.Avoided using deprecated Selenium methods to find elements.
signed_data_view as it was causing issues with
django-urlconfchecks <https://github.com/AliSayyah/django-urlconfchecks/>__.Deprecated features ~~~~~~~~~~~~~~~~~~~
Properly implemented tracking and display of PostgreSQL transactions.
Removed third party panels which have been archived on GitHub.
Added Django 4.1b1 to the CI matrix.
Stopped crashing when request.GET and request.POST are neither dictionaries nor QueryDict instances. Using anything but QueryDict instances isn't a valid use of Django but, again, django-debug-toolbar shouldn't crash.
Fixed the cache panel to work correctly in the presence of concurrency by avoiding the use of signals.
Reworked the cache panel instrumentation mechanism to monkey patch methods on the cache instances directly instead of replacing cache instances with wrapper classes.
Added a debug_toolbar.panels.Panel.ready class method that panels can override to perform any initialization or instrumentation that needs to be done unconditionally at startup time.
Added pyflame (for flame graphs) to the list of third-party panels.
Fixed the cache panel to correctly count cache misses from the get_many() cache method.
Removed some obsolete compatibility code from the stack trace recording code.
Added a new mechanism for capturing stack traces which includes per-request caching to reduce expensive file system operations. Updated the cache and SQL panels to record stack traces using this new mechanism.
Changed the docs tox environment to allow passing positional arguments. This allows e.g. building a HTML version of the docs using tox -e docs html.
Stayed on top of pre-commit hook updates.
Replaced OrderedDict by dict where possible.
The debug_toolbar.utils.get_stack() and debug_toolbar.utils.tidy_stacktrace() functions are deprecated in favor of the new debug_toolbar.utils.get_stack_trace() function. They will removed in the next major version of the Debug Toolbar.
Fixed issue of stacktrace having frames that have no path to the file, but are instead a string of the code such as ' '.
'<frozen importlib._bootstrap>'.recording to
allow_sql.Track calls to meth:django.core.cache.cache.get_or_set.
Track calls to django.core.cache.cache.get_or_set.
Removed support for Django < 3.2.
Updated check W006 to look for django.template.loaders.app_directories.Loader.
Reset settings when overridden in tests. Packages or projects using django-debug-toolbar can now use Django’s test settings tools, like @override_settings, to reconfigure the toolbar during tests.
Optimize rendering of SQL panel, saving about 30% of its run time.
New records in history panel will flash green.
Automatically update History panel on AJAX requests from client.
Revert PR 1426 - PostGIS param stripping. This was removing leading and trailing characters from string typed parameters for postgres applications.
Full Changelog: https://github.com/jazzband/django-debug-toolbar/compare/3.2.3...3.2.4
Update translations and revert xgettext aliasing. by @tim-schilling in https://github.com/jazzband/django-debug-toolbar/pull/1494
Full Changelog: https://github.com/jazzband/django-debug-toolbar/compare/3.2.2...3.2.3
django.core.cache as a whole. The middleware.cache is still
being patched as a whole in order to attempt to catch any cache
usages before enable_instrumentation is called.W006 to warn that the toolbar is incompatible with
TEMPLATES settings configurations with APP_DIRS set to False.urls module and update documentation to no longer require
importing the toolbar package.Use current_thread instead of currentThread method that was deprecated in Python 3.10 by @tirkarthi in https://github.com/jazzband/django-debug-toolba…
Full Changelog: https://github.com/jazzband/django-debug-toolbar/compare/3.2.1...3.2.2
HistoryPanel when RENDER_PANELS is True
or if RENDER_PANELS is None and the WSGI container is
running with multiple processes.RENDER_PANELS functionality so that when True panels are
rendered during the request and not loaded asynchronously.request.urlconf override when checking for toolbar requests.Fixed SQL Injection vulnerability, CVE-2021-30459. The toolbar now calculates a signature on all fields for the SQL select, explain, and analyze forms…
djdt.cookie.set() to set sameSite=Lax by default if
callers do not provide a value.PRETTIFY_SQL configuration option to support controlling
SQL token grouping. By default it's set to True. When set to False,
a performance improvement can be seen by the SQL panel.djdt.panel.[PanelId] where PanelId is the panel_id property
of the panel's Python class. Listening for this event corrects the bug
in the Timer Panel in which it didn't insert the browser timings
after switching requests in the History Panel./__debug__/ while the documentation indicates it's not required.Moved CI to GitHub Actions: https://github.com/jazzband/django-debug-toolbar/actions
request.GET and request.POST are
dictionaries instead of QueryDict instances. This isn't a valid
use of Django but django-debug-toolbar shouldn't crash anyway.css and a js template block to
debug_toolbar/base.html to allow overriding CSS and JS.Removed calls to the deprecated request.is_ajax() method. These calls were unnecessary now that most endpoints return JSON anyway.
Fixed a regression where the JavaScript code crashed with an invalid CSS selector when searching for an element to replace.
Replaced remaining images with CSS.
Continued refactoring the HTML and CSS code for simplicity, continued improving the use of semantic HTML.
Stopped caring about prehistoric browsers for good. Started splitting up the JavaScript code to take advantage of JavaScript modules.
Continued removing unused CSS.
Started running Selenium tests on Travis CI.
Added a system check which prevents using django-debug-toolbar without any enabled panels.
Added Panel.run_checks() for panels to verify the configuration before the application starts.
Validate the static file paths specified in STATICFILES_DIRS exist via ~debug_toolbar.panels.staticfiles.StaticFilesPanel
Introduced prettier to format the frontend code.
Started accessing history views using GET requests since they do not change state on the server.
Fixed a bug where unsuccessful requests (e.g. network errors) were silently ignored.
Started spellchecking the documentation.
Removed calls to the deprecated request.is_ajax() method. These calls were unnecessary now that most endpoints return JSON anyway.
Removed support for Python 3.5.
Nothing published for this version
Fixed a crash in the history panel when sending an empty JSON POST request.
make example also set up the database and a superuser
account.python -m pip to pip.Backwards incompatible changes ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Added an .editorconfig file specifying indentation rules etc.
Updated the Italian translation.
Added support for Django 3.1a1. fetch() and jQuery.ajax requests are now detected by the absence of a Accept: text/html header instead of the jQuery-specific X-Requested-With header on Django 3.1 or better.
Pruned unused CSS and removed hacks for ancient browsers.
Added the new Panel.scripts property. This property should return a list of JavaScript resources to be loaded in the browser when displaying the panel. Right now, this is used by a single panel, the Timer panel. Third party panels can use this property to add scripts rather then embedding them in the content HTML.
Switched from JSHint to ESLint. Added an ESLint job to the Travis CI matrix.
Debug toolbar state which is only needed in the JavaScript code now uses localStorage.
Updated the code to avoid a few deprecation warnings and resource warnings.
Started loading JavaScript as ES6 modules.
Added support for cache.touch() when using django-debug-toolbar.
Eliminated more inline CSS.
Updated tox.ini and Makefile to use isort>=5.
Increased RESULTS_CACHE_SIZE to 25 to better support AJAX requests.
Fixed the close button CSS by explicitly specifying the box-sizing property.
Simplified the isort configuration by taking advantage of isort's black profile.
Added ~debug_toolbar.panels.history.HistoryPanel including support for AJAX requests.
Loading panel content no longer executes the scripts elements embedded in the HTML. Third party panels that require JavaScript resources should now use the Panel.scripts property.
Removed support for end of life Django 1.11. The minimum supported Django is now 2.2.
The Debug Toolbar now loads a JavaScript module. Typical local development using Django runserver is not impacted. However, if your application server and static files server are at different origins, you may see CORS errors in your browser's development console. See the "Cross-Origin Request Blocked" section of the installation docs for details on how to resolve this issue.
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Removed support for end of life Django 2.0 and 2.1.
Small improvements to the code to take advantage of newer Django APIs and avoid warnings because of deprecated code.
djdt.init function too.Backwards incompatible changes ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Updated ~debug_toolbar.panels.staticfiles.StaticFilesPanel to be compatible with Django 3.0.
The ~debug_toolbar.panels.profiling.ProfilingPanel is now enabled but inactive by default.
Fixed toggling of table rows in the profiling panel UI.
The ~debug_toolbar.panels.profiling.ProfilingPanel no longer skips remaining panels or middlewares.
Improved the installation documentation.
Fixed a possible crash in the template panel.
Added support for psycopg2 Composed objects.
Changed the Jinja2 tests to use Django's own Jinja2 template backend.
Added instrumentation to queries using server side cursors.
Too many small improvements and cleanups to list them all.
Removed support for Python 2.
Removed support for Django's deprecated MIDDLEWARE_CLASSES setting.
Restructured debug_toolbar.panels.Panel to execute more like the new-style Django MIDDLEWARE. The Panel.__init__() method is now passed get_response as the first positional argument. The debug_toolbar.panels.Panel.process_request method must now always return a response. Usually this is the response returned by get_response() but the panel may also return a different response as is the case in the ~debug_toolbar.panels.redirects.RedirectsPanel. Third party panels must adjust to this new architecture. Panel.process_response() and Panel.process_view() have been removed as a result of this change.
The deprecated API, debug_toolbar.panels.DebugPanel, has been removed. Third party panels should use debug_toolbar.panels.Panel instead.
The following deprecated settings have been removed:
HIDDEN_STACKTRACE_MODULES
HIDE_DJANGO_SQL
INTERCEPT_REDIRECTS
RESULTS_STORE_SIZE
ROOT_TAG_ATTRS
TAG
Nothing published for this version
Nothing published for this version
Use defer on all tags to avoid blocking HTML parsing, removed inline JavaScript.
defer on all <script> tags to avoid blocking HTML parsing,
removed inline JavaScript.black <https://github.com/ambv/black>__.Fixed a problem where the duplicate query detection breaks for unhashable query parameters.
URLSearchParams usage.Removed support for Django < 1.11.
fetch, classList
etc. The JQUERY_URL setting is also removed because it isn't
necessary anymore. If you depend on jQuery, integrate it yourself.Fix erroneous ContentNotRenderedError raised by the redirects panel.
ContentNotRenderedError raised by the redirects panel.This version is compatible with Django 2.0 and requires Django 1.8 or later.
This version is compatible with Django 2.0 and requires Django 1.8 or later.
The profiling panel now escapes reported data resulting in valid HTML.
Many minor cleanups and bug fixes.
Backwards incompatible changes ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
This version is compatible with Django 1.11 and requires Django 1.8 or later.
Backwards incompatible changes
* ``debug_toolbar.middleware.show_toolbar`` (the default value of setting
``SHOW_TOOLBAR_CALLBACK``) no longer returns ``False`` for AJAX requests.
This is to allow reusing the ``SHOW_TOOLBAR_CALLBACK`` function to verify
access to panel views requested via AJAX. Projects defining a custom
``SHOW_TOOLBAR_CALLBACK`` should remove checks for AJAX requests in order to
continue to allow access to these panels.
Features
~~~~~~~~
* New decorator ``debug_toolbar.decorators.require_show_toolbar`` prevents
unauthorized access to decorated views by checking ``SHOW_TOOLBAR_CALLBACK``
every request. Unauthorized access results in a 404.
* The ``SKIP_TEMPLATE_PREFIXES`` setting allows skipping templates in
the templates panel. Template-based form widgets' templates are
skipped by default to avoid panel sizes going into hundreds of
megabytes of HTML.
Bug fixes
~~~~~~~~~
* All views are now decorated with
``debug_toolbar.decorators.require_show_toolbar`` preventing unauthorized
access.
* The templates panel now reuses contexts' pretty printed version which
makes the debug toolbar usable again with Django 1.11's template-based
forms rendering.
* Long SQL statements are now forcibly wrapped to fit on the screen.
Deprecation warnings were fixed.
Bug fixes
* Recursive template extension is now understood.
* Deprecation warnings were fixed.
* The SQL panel uses HMAC instead of simple hashes to verify that SQL
statements have not been changed. Also, the handling of bytes and text
for hashing has been hardened. Also, a bug with Python's division
handling has been fixed for improved Python 3 support.
* An error with django-jinja has been fixed.
* A few CSS classes have been prefixed with ``djdt-`` to avoid
conflicting class names.
The debug toolbar was adopted by Jazzband.
The debug toolbar was adopted by Jazzband.
Support for automatic setup has been removed as it was frequently problematic. Installation now requires explicit setup. The DEBUG_TOOLBAR_PATCH_SETTINGS setting has also been removed as it is now unused. See the installation documentation for details.
The DebugToolbarMiddleware now also supports Django 1.10's MIDDLEWARE setting.
This version is compatible with Django 1.10 and requires Django 1.8 or later.
This version is compatible with Django 1.10 and requires Django 1.8 or later.
Support for Python 3.2 is dropped.
Bug fixes
* Restore compatibility with sqlparse ≥ 0.2.0.
* Add compatibility with Bootstrap 4, Pure CSS, MDL, etc.
* Improve compatibility with RequireJS / AMD.
* Improve the UI slightly.
* Fix invalid (X)HTML.
This version is compatible with Django 1.9 and requires Django 1.7 or later.
This version is compatible with Django 1.9 and requires Django 1.7 or later.
New panel method debug_toolbar.panels.Panel.generate_stats allows panels to only record stats when the toolbar is going to be inserted into the response.
Response time for requests of projects with numerous media files has been improved.
Nothing published for this version
Your coding agent can read these notes before it upgrades. Set up the MCP server →