Django-debug-toolbar: DjDT inverse l'url avant le chargement des modèles dans urls.py

Créé le 14 janv. 2014  ·  8Commentaires  ·  Source: jazzband/django-debug-toolbar

Au départ, j'ai eu cette erreur en essayant de configurer un nouveau projet avec Django Debug Toolbar et uwsgi :

NoReverseMatch at /

u'djdt' is not a registered namespace

Cela s'est produit en premier dans uwsgi, qui ne charge pas les modèles au préalable. Plus tard, j'ai pu le reproduire en patchant django runserver avec ce qui suit :

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"

J'ai mis un pdb avant le correctif d'URL dans models.py et j'ai obtenu ceci :

/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

Il semble que admin.autodiscover() charge les modèles dans urls.py, ce qui force ensuite debug_toolbar.models à inverser une URL alors que urls.py n'a pas encore d'URL.

Commentaire le plus utile

@jonykwa Avez-vous essayé d'ajouter ceci à l'urls.py de votre projet ?

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

Tous les 8 commentaires

Veuillez utiliser la configuration explicite décrite dans la documentation. Malheureusement, cela ne fonctionnera pas de manière satisfaisante avant la sortie de Django 1.7.

Pour ceux qui atterrissent sur ce problème : Voici un lien vers la configuration explicite : http://django-debug-toolbar.readthedocs.org/en/1.0/installation.html#explicit -setup

J'ai toujours ce problème même après avoir ajouté DEBUG_TOOLBAR_PATCH_SETTINGS = False à mes settings.py, d'autres idées ?

+1 @jonykwa

@jonykwa Avez-vous essayé d'ajouter ceci à l'urls.py de votre projet ?

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

J'ai dû faire les deux suggestions de @clarkbarz et @avelis dans le cadre de notre mise à niveau Django 1.5->1.6. Merci!

Juste pour ajouter une chose simple à vérifier lorsque vous obtenez cette erreur. Si vous ajoutez l'urlpattern avant vos propres modèles d'url, n'oubliez pas d'ajouter votre propre urlpattern :

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

Ici settings.DEBUG est déclaré après les modèles d'url de mon site, mais en veillant à ce que le modèle d'url debug soit avant les modèles d'url site .

Comme vu dans les docs pour URLConf 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
Cette page vous a été utile?
0 / 5 - 0 notes