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.
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
Komentar yang paling membantu
@jonykwa Apakah Anda mencoba menambahkan ini ke urls.py proyek Anda?