diff options
| -rw-r--r-- | debug_toolbar/__init__.py | 8 | ||||
| -rw-r--r-- | debug_toolbar/models.py | 3 | ||||
| -rw-r--r-- | debug_toolbar/panels/__init__.py | 6 | ||||
| -rw-r--r-- | debug_toolbar/panels/sql.py | 9 | ||||
| -rw-r--r-- | debug_toolbar/panels/template.py | 7 | ||||
| -rw-r--r-- | debug_toolbar/toolbar.py | 17 | ||||
| -rw-r--r-- | debug_toolbar/urls.py | 18 | ||||
| -rw-r--r-- | docs/installation.rst | 9 | ||||
| -rw-r--r-- | tests/__init__.py | 1 | ||||
| -rw-r--r-- | tests/urls.py | 4 |
10 files changed, 57 insertions, 25 deletions
diff --git a/debug_toolbar/__init__.py b/debug_toolbar/__init__.py index 3a8f300..61c4e7a 100644 --- a/debug_toolbar/__init__.py +++ b/debug_toolbar/__init__.py @@ -1,9 +1,17 @@ from __future__ import unicode_literals + __all__ = ('VERSION',) + try: VERSION = __import__('pkg_resources') \ .get_distribution('django-debug-toolbar').version except Exception as e: VERSION = 'unknown' + + +from .toolbar import DebugToolbar + + +urls = DebugToolbar.get_urls(), 'djdt', 'djdt' diff --git a/debug_toolbar/models.py b/debug_toolbar/models.py index a204b13..ef1d012 100644 --- a/debug_toolbar/models.py +++ b/debug_toolbar/models.py @@ -5,6 +5,7 @@ from django.conf.urls import include, patterns, url from django.core.urlresolvers import reverse, NoReverseMatch from django.utils.importlib import import_module +import debug_toolbar from debug_toolbar.middleware import DebugToolbarMiddleware @@ -50,7 +51,7 @@ def patch_root_urlconf(): except NoReverseMatch: urlconf_module = import_module(settings.ROOT_URLCONF) urlconf_module.urlpatterns += patterns('', # noqa - url(r'^__debug__/', include('debug_toolbar.urls', namespace='djdt', app_name='djdt')), + url(r'^__debug__/', include(debug_toolbar.urls)), ) diff --git a/debug_toolbar/panels/__init__.py b/debug_toolbar/panels/__init__.py index e60a5e6..47ca996 100644 --- a/debug_toolbar/panels/__init__.py +++ b/debug_toolbar/panels/__init__.py @@ -37,6 +37,12 @@ class DebugPanel(object): def dom_id(self): return 'djDebug%sPanel' % (self.name.replace(' ', '')) + # URLs for panel-specific views + + @classmethod + def get_urls(cls): + return [] + # Titles and subtitles def nav_title(self): diff --git a/debug_toolbar/panels/sql.py b/debug_toolbar/panels/sql.py index 1ccdc47..8042269 100644 --- a/debug_toolbar/panels/sql.py +++ b/debug_toolbar/panels/sql.py @@ -3,6 +3,7 @@ from __future__ import unicode_literals import uuid from copy import copy +from django.conf.urls import patterns, url from django.db import connections from django.utils.translation import ugettext_lazy as _, ungettext_lazy as __ @@ -103,6 +104,14 @@ class SQLDebugPanel(DebugPanel): self._sql_time += kwargs['duration'] self._num_queries += 1 + @classmethod + def get_urls(cls): + return patterns('debug_toolbar.views', # noqa + url(r'^sql_select/$', 'sql_select', name='sql_select'), + url(r'^sql_explain/$', 'sql_explain', name='sql_explain'), + url(r'^sql_profile/$', 'sql_profile', name='sql_profile'), + ) + def nav_title(self): return _('SQL') diff --git a/debug_toolbar/panels/template.py b/debug_toolbar/panels/template.py index d918cd7..562e87f 100644 --- a/debug_toolbar/panels/template.py +++ b/debug_toolbar/panels/template.py @@ -6,6 +6,7 @@ from pprint import pformat import django from django import http from django.conf import settings +from django.conf.urls import patterns, url from django.db.models.query import QuerySet, RawQuerySet from django.template.context import get_standard_processors from django.test.signals import template_rendered @@ -113,6 +114,12 @@ class TemplateDebugPanel(DebugPanel): kwargs['context'] = [force_text(item) for item in context_list] self.templates.append(kwargs) + @classmethod + def get_urls(cls): + return patterns('debug_toolbar.views', # noqa + url(r'^template_source/$', 'template_source', name='template_source'), + ) + def nav_title(self): return _('Templates') diff --git a/debug_toolbar/toolbar.py b/debug_toolbar/toolbar.py index 32dc1b7..bf632cd 100644 --- a/debug_toolbar/toolbar.py +++ b/debug_toolbar/toolbar.py @@ -5,6 +5,7 @@ The main DebugToolbar class that loads and renders the Toolbar. from __future__ import unicode_literals from django.conf import settings +from django.conf.urls import patterns, url from django.core.exceptions import ImproperlyConfigured from django.template.loader import render_to_string from django.utils.datastructures import SortedDict @@ -107,3 +108,19 @@ class DebugToolbar(object): panel_classes.append(panel_class) cls._panel_classes = panel_classes return cls._panel_classes + + _urlpatterns = None + + @classmethod + def get_urls(cls): + if cls._urlpatterns is None: + # Load URLs in a temporary variable for thread safety. + # Global URLs + urlpatterns = patterns('debug_toolbar.views', # noqa + url(r'^render_panel/$', 'render_panel', name='render_panel'), + ) + # Per-panel URLs + for panel_class in cls.get_panel_classes(): + urlpatterns += panel_class.get_urls() + cls._urlpatterns = urlpatterns + return cls._urlpatterns diff --git a/debug_toolbar/urls.py b/debug_toolbar/urls.py deleted file mode 100644 index 860187a..0000000 --- a/debug_toolbar/urls.py +++ /dev/null @@ -1,18 +0,0 @@ -""" -URLpatterns for the debug toolbar. - -The debug toolbar middleware will monkey-patch them into the default urlconf -if they aren't explicitly included. -""" - -from __future__ import unicode_literals - -from django.conf.urls import patterns, url - -urlpatterns = patterns('debug_toolbar.views', # noqa - url(r'^render_panel/$', 'render_panel', name='render_panel'), - url(r'^sql_select/$', 'sql_select', name='sql_select'), - url(r'^sql_explain/$', 'sql_explain', name='sql_explain'), - url(r'^sql_profile/$', 'sql_profile', name='sql_profile'), - url(r'^template_source/$', 'template_source', name='template_source'), -) diff --git a/docs/installation.rst b/docs/installation.rst index 514548a..3d71e12 100644 --- a/docs/installation.rst +++ b/docs/installation.rst @@ -57,15 +57,14 @@ Add the Debug Toolbar's URLs to your project's URLconf as follows:: from django.conf.urls import include, patterns, url if settings.DEBUG: + import debug_toolbar urlpatterns += patterns('', - url(r'^__debug__/', include('debug_toolbar.urls', namespace='djdt', app_name='djdt')), + url(r'^__debug__/', include(debug_toolbar.urls)), ) This example uses the ``__debug__`` prefix, but you can use any prefix that -doesn't clash with your application's URLs. - -It is mandatory to use the ``djdt`` namespace as shown above. This avoids -conflicts when reversing URLs by name. +doesn't clash with your application's URLs. Note the lack of quotes around +``debug_toolbar.urls``. If the URLs aren't included in your root URLconf, the Debug Toolbar automatically appends them. diff --git a/tests/__init__.py b/tests/__init__.py index b3b9440..3bf8994 100644 --- a/tests/__init__.py +++ b/tests/__init__.py @@ -20,3 +20,4 @@ def update_toolbar_panels(**kwargs): if kwargs['setting'] == 'DEBUG_TOOLBAR_PANELS': dt_settings.PANELS = kwargs['value'] or dt_settings.PANELS_DEFAULTS DebugToolbar._panel_classes = None + # Not implemented: invalidate debug_toolbar.urls diff --git a/tests/urls.py b/tests/urls.py index d4417a1..f297834 100644 --- a/tests/urls.py +++ b/tests/urls.py @@ -5,6 +5,8 @@ from __future__ import unicode_literals from django.conf.urls import include, patterns, url from django.contrib import admin +import debug_toolbar + from .models import NonAsciiRepr @@ -18,5 +20,5 @@ urlpatterns = patterns('tests.views', # noqa url(r'^non_ascii_request/$', 'regular_view', {'title': NonAsciiRepr()}), url(r'^new_user/$', 'new_user'), url(r'^execute_sql/$', 'execute_sql'), - url(r'^__debug__/', include('debug_toolbar.urls', namespace='djdt', app_name='djdt')), + url(r'^__debug__/', include(debug_toolbar.urls)), ) |
