From 105b6055575ee38edd4ce4c8efbfcb9dba260953 Mon Sep 17 00:00:00 2001 From: Federico Bond Date: Fri, 21 Nov 2025 20:21:43 +1100 Subject: [PATCH] Fix display of values in settings panel --- debug_toolbar/panels/settings.py | 12 ++++++++-- .../debug_toolbar/panels/settings.html | 2 +- docs/changes.rst | 1 + tests/panels/test_settings.py | 23 +++++++++++++++++-- 4 files changed, 33 insertions(+), 5 deletions(-) diff --git a/debug_toolbar/panels/settings.py b/debug_toolbar/panels/settings.py index 4f91e39fa..86868ad6b 100644 --- a/debug_toolbar/panels/settings.py +++ b/debug_toolbar/panels/settings.py @@ -1,12 +1,20 @@ +from pprint import pformat + from django.utils.translation import gettext_lazy as _ from django.views.debug import get_default_exception_reporter_filter from debug_toolbar.panels import Panel -from debug_toolbar.sanitize import force_str get_safe_settings = get_default_exception_reporter_filter().get_safe_settings +def safe_pformat(obj): + try: + return pformat(obj) + except Exception as e: + return f"" + + class SettingsPanel(Panel): """ A panel to display all variables in django.conf.settings @@ -27,7 +35,7 @@ def generate_stats(self, request, response): self.record_stats( { "settings": { - key: force_str(value) + key: safe_pformat(value) for key, value in sorted(get_safe_settings().items()) } } diff --git a/debug_toolbar/templates/debug_toolbar/panels/settings.html b/debug_toolbar/templates/debug_toolbar/panels/settings.html index 5214c1b42..67449d345 100644 --- a/debug_toolbar/templates/debug_toolbar/panels/settings.html +++ b/debug_toolbar/templates/debug_toolbar/panels/settings.html @@ -10,7 +10,7 @@ {% for name, value in settings.items %} {{ name }} - {{ value|pprint }} + {{ value }} {% endfor %} diff --git a/docs/changes.rst b/docs/changes.rst index 752f9eedb..370025e3a 100644 --- a/docs/changes.rst +++ b/docs/changes.rst @@ -16,6 +16,7 @@ Pending ``debug_toolbar.store.DatabaseStore`` with ``SKIP_TOOLBAR_QUERIES``. * Fixed font family for code blocks and stack traces in the toolbar. * Added test to confirm Django's ``TestCase.assertNumQueries`` works. +* Fixed display of values in settings panel. 6.1.0 (2025-10-30) ------------------ diff --git a/tests/panels/test_settings.py b/tests/panels/test_settings.py index 89b016dc0..448ef0e5e 100644 --- a/tests/panels/test_settings.py +++ b/tests/panels/test_settings.py @@ -1,6 +1,25 @@ -from django.test import override_settings +from django.test import RequestFactory, override_settings -from ..base import IntegrationTestCase +from debug_toolbar.panels.settings import SettingsPanel + +from ..base import BaseTestCase, IntegrationTestCase + +rf = RequestFactory() + + +class SettingsPanelTestCase(BaseTestCase): + panel_id = SettingsPanel.panel_id + + def test_panel_recording(self): + self.request = rf.post("/", data={"foo": "bar"}) + response = self.panel.process_request(self.request) + self.panel.generate_stats(self.request, response) + + settings = self.panel.get_stats()["settings"] + self.assertEqual(settings["USE_THOUSAND_SEPARATOR"], "False") + self.assertEqual(settings["ABSOLUTE_URL_OVERRIDES"], "{}") + self.assertEqual(settings["EMAIL_HOST"], "'localhost'") + self.assertEqual(settings["EMAIL_PORT"], "25") @override_settings(DEBUG=True)