Django-debug-toolbar: DjDT membalikkan url sebelum model dimuat di urls.py

Dibuat pada 14 Jan 2014  ·  8Komentar  ·  Sumber: jazzband/django-debug-toolbar

Awalnya, saya mendapatkan kesalahan ini ketika mencoba menyiapkan proyek baru dengan Django Debug Toolbar dan uwsgi:

NoReverseMatch at /

u'djdt' is not a registered namespace

Ini terjadi di uwsgi terlebih dahulu, yang tidak memuat model sebelumnya. Kemudian, dapat mereproduksinya dengan menambal Django runserver dengan yang berikut:

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"

Saya meletakkan pdb sebelum patch url di models.py, dan mendapatkan ini:

/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

Sepertinya admin.autodiscover() memuat model di urls.py, yang kemudian memaksa debug_toolbar.models untuk membalikkan url meskipun urls.py belum memiliki url di dalamnya.

Komentar yang paling membantu

@jonykwa Apakah Anda mencoba menambahkan ini ke urls.py proyek Anda?

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

Semua 8 komentar

Silakan gunakan pengaturan eksplisit yang dijelaskan dalam dokumentasi. Sayangnya ini tidak akan bekerja dengan memuaskan sampai Django 1.7 dirilis.

Untuk orang lain yang mendapatkan masalah ini: Berikut ini tautan ke Pengaturan Eksplisit: http://django-debug-toolbar.readthedocs.org/en/1.0/installation.html#explicit -setup

Saya masih memiliki masalah ini bahkan setelah saya menambahkan DEBUG_TOOLBAR_PATCH_SETTINGS = False ke settings.py saya, ada ide lagi?

+1 @jonykwa

@jonykwa Apakah Anda mencoba menambahkan ini ke urls.py proyek Anda?

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

Saya harus melakukan kedua saran dari @clarkbarz dan @avelis sebagai bagian dari peningkatan Django 1.5->1.6 kami. Terima kasih!

Hanya untuk menambahkan beberapa hal sederhana untuk diperiksa ketika Anda mendapatkan kesalahan ini. Jika Anda menambahkan urlpattern sebelum pola url Anda sendiri, jangan lupa untuk menambahkan urlpattern Anda sendiri:

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

Di sini settings.DEBUG dideklarasikan setelah pola url situs saya, tetapi pastikan bahwa pola url debug berada sebelum pola url site .

Seperti yang terlihat di dokumen untuk 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
Apakah halaman ini membantu?
0 / 5 - 0 peringkat