Django-debug-toolbar: DjDT kehrt die URL um, bevor Modelle in urls.py geladen werden

Erstellt am 14. Jan. 2014  ·  8Kommentare  ·  Quelle: jazzband/django-debug-toolbar

Anfangs erhielt ich diesen Fehler, als ich versuchte, ein neues Projekt mit der Django Debug Toolbar und uwsgi einzurichten:

NoReverseMatch at /

u'djdt' is not a registered namespace

Dies geschah zuerst in uwsgi, das die Modelle nicht vorher lädt. Später konnte es durch Patchen von django Runserver mit folgendem reproduziert werden:

diff --git a/django/core/management/commands/runserver.py b/django/core/management/commands/runserver.py
index 391e0b4..02dadc7 100644
--- a/django/core/management/commands/runserver.py
+++ b/django/core/management/commands/runserver.py
@@ -89,7 +89,7 @@ class Command(BaseCommand):
         quit_command = (sys.platform == 'win32') and 'CTRL-BREAK' or 'CONTROL-C'

         self.stdout.write("Validating models...\n\n")
-        self.validate(display_num_errors=True)
+        #self.validate(display_num_errors=True)
         self.stdout.write((
             "%(started_at)s\n"
             "Django version %(version)s, using settings %(settings)r\n"

Ich habe eine PDB vor dem URL-Patching in models.py eingefügt und Folgendes erhalten:

/usr/lib64/python2.7/threading.py(784)__bootstrap()
-> self.__bootstrap_inner()
  /usr/lib64/python2.7/threading.py(811)__bootstrap_inner()
-> self.run()
  /usr/lib64/python2.7/threading.py(764)run()
-> self.__target(*self.__args, *self.__kwargs)
  /usr/lib64/python2.7/SocketServer.py(593)process_request_thread()
-> self.finish_request(request, client_address)
  /usr/lib64/python2.7/SocketServer.py(334)finish_request()
-> self.RequestHandlerClass(request, client_address, self)
  django/core/servers/basehttp.py(150)__init__()
-> super(WSGIRequestHandler, self).__init__(*args, **kwargs)
  /usr/lib64/python2.7/SocketServer.py(649)__init__()
-> self.handle()
  /usr/lib64/python2.7/wsgiref/simple_server.py(124)handle()
-> handler.run(self.server.get_app())
  /usr/lib64/python2.7/wsgiref/handlers.py(85)run()
-> self.result = application(self.environ, self.start_response)
  django/contrib/staticfiles/handlers.py(72)__call__()
-> return self.application(environ, start_response)
  django/core/handlers/wsgi.py(255)__call__()
-> response = self.get_response(request)
  django/core/handlers/base.py(103)get_response()
-> resolver_match = resolver.resolve(request.path_info)
  django/core/urlresolvers.py(319)resolve()
-> for pattern in self.url_patterns:
  django/core/urlresolvers.py(347)url_patterns()
-> patterns = getattr(self.urlconf_module, "urlpatterns", self.urlconf_module)
  django/core/urlresolvers.py(342)urlconf_module()
-> self._urlconf_module = import_module(self.urlconf_name)
  django/utils/importlib.py(35)import_module()
-> __import__(name)
  project/urls.py(5)<module>()
-> admin.autodiscover()
  mezzanine/boot/__init__.py(76)autodiscover()
-> django_autodiscover(*args, **kwargs)
  django/contrib/admin/__init__.py(29)autodiscover()
-> import_module('%s.admin' % app)
  django/utils/importlib.py(35)import_module()
-> __import__(name)
  django/contrib/auth/admin.py(179)<module>()
-> admin.site.register(Group, GroupAdmin)
  mezzanine/boot/lazy_admin.py(22)register()
-> super(LazyAdminSite, self).register(*args, **kwargs)
  django/contrib/admin/sites.py(98)register()
-> validate(admin_class, model)
  django/contrib/admin/validation.py(22)validate()
-> models.get_apps()
  django/db/models/loading.py(134)get_apps()
-> self._populate()
  django/db/models/loading.py(72)_populate()
-> self.load_app(app_name, True)
  django/db/models/loading.py(96)load_app()
-> models = import_module('.models', app_name)
  django/utils/importlib.py(35)import_module()
-> __import__(name)
  debug_toolbar/models.py(63)<module>()
-> patch_root_urlconf()
> debug_toolbar/models.py(51)patch_root_urlconf()
-> reverse('djdt:render_panel')
(Pdb) reverse('djdt:render_panel')
** ImproperlyConfigured: The included urlconf project.urls doesn't have any patterns in it

Es scheint, als ob admin.autodiscover() die Modelle in urls.py lädt, was debug_toolbar.models anschließend zwingt, eine URL umzukehren, obwohl urls.py noch keine URLs enthält.

Hilfreichster Kommentar

@jonykwa Haben Sie versucht, dies zu urls.py Ihres Projekts hinzuzufügen?

if settings.DEBUG:
    import debug_toolbar
    urlpatterns += patterns('',
        url(r'^__debug__/', include(debug_toolbar.urls)),
    )

Alle 8 Kommentare

Bitte verwenden Sie das explizite Setup, das in der Dokumentation beschrieben ist. Leider wird dies nicht zufriedenstellend funktionieren, bis Django 1.7 veröffentlicht wird.

Für andere, die bei diesem Problem landen: Hier ist ein Link zum expliziten Setup: http://django-debug-toolbar.readthedocs.org/en/1.0/installation.html#explicit -setup

Ich habe dieses Problem immer noch, auch nachdem ich DEBUG_TOOLBAR_PATCH_SETTINGS = False zu my settings.py hinzugefügt habe, haben Sie weitere Ideen?

+1 @jonykwa

@jonykwa Haben Sie versucht, dies zu urls.py Ihres Projekts hinzuzufügen?

if settings.DEBUG:
    import debug_toolbar
    urlpatterns += patterns('',
        url(r'^__debug__/', include(debug_toolbar.urls)),
    )

Ich musste beide Vorschläge von @clarkbarz und @avelis im Rahmen unseres Django 1.5->1.6-Upgrades

Nur um eine einfache Sache hinzuzufügen, um zu überprüfen, wenn Sie diesen Fehler erhalten. Wenn Sie das URL-Muster vor Ihren eigenen URL-Mustern hinzufügen, vergessen Sie nicht, Ihr eigenes URL-Muster anhängen zu lassen:

if settings.DEBUG:
    import debug_toolbar
    urlpatterns += [
        url(r'^__debug__/', include(debug_toolbar.urls)),
    ]
urlpatterns += [  # DON'T FORGET THE '+=' HERE!
.....  
]

Hier wird settings.DEBUG nach meinen Site-URL-Mustern deklariert, aber sichergestellt, dass das URL-Muster debug vor den URL-Mustern site .

Wie in den Dokumenten für URLConf zu sehen ist http://django-debug-toolbar.readthedocs.io/en/stable/installation.html#urlconf

from django.conf.urls import url, include
from django.contrib import admin
from django.conf import settings


urlpatterns = [
    url(r'^tinymce/', include('tinymce.urls')),
    url(r'^admin/', admin.site.urls),
]

if settings.DEBUG:
    import debug_toolbar
    urlpatterns = [
        url(r'^__debug__/', include(debug_toolbar.urls)),
    ] + urlpatterns
War diese Seite hilfreich?
0 / 5 - 0 Bewertungen