Wenn django-debug-toolbar
python manage.py test
reverse
der Dokumentation installiert und konfiguriert ist, beim Ausführen eines Django-Projekttests (z ), werden diese Fehler wie folgt angezeigt:
======================================================================
ERROR: test_list (toolbar.tests.MyTests)
----------------------------------------------------------------------
Traceback (most recent call last):
File "C:\Users\vm\Desktop\test_project\toolbar\tests.py", line 10, in test_li
st
response = self.client.get(reverse('list'))
File "C:\Python27\lib\site-packages\django\test\client.py", line 536, in get
**extra)
File "C:\Python27\lib\site-packages\django\test\client.py", line 340, in get
return self.generic('GET', path, secure=secure, **r)
File "C:\Python27\lib\site-packages\django\test\client.py", line 416, in gener
ic
return self.request(**r)
File "C:\Python27\lib\site-packages\django\test\client.py", line 501, in reque
st
six.reraise(*exc_info)
File "C:\Python27\lib\site-packages\django\core\handlers\exception.py", line 4
1, in inner
response = get_response(request)
File "C:\Python27\lib\site-packages\django\utils\deprecation.py", line 142, in
__call__
response = self.process_response(request, response)
File "C:\Python27\lib\site-packages\debug_toolbar\middleware.py", line 134, in
process_response
bits[-2] += toolbar.render_toolbar()
File "C:\Python27\lib\site-packages\debug_toolbar\toolbar.py", line 64, in ren
der_toolbar
return render_to_string('debug_toolbar/base.html', context)
File "C:\Python27\lib\site-packages\django\template\loader.py", line 68, in re
nder_to_string
return template.render(context, request)
File "C:\Python27\lib\site-packages\django\template\backends\django.py", line
66, in render
return self.template.render(context)
File "C:\Python27\lib\site-packages\django\template\base.py", line 207, in ren
der
return self._render(context)
File "C:\Python27\lib\site-packages\django\test\utils.py", line 107, in instru
mented_test_render
return self.nodelist.render(context)
File "C:\Python27\lib\site-packages\django\template\base.py", line 990, in ren
der
bit = node.render_annotated(context)
File "C:\Python27\lib\site-packages\django\template\base.py", line 957, in ren
der_annotated
return self.render(context)
File "C:\Python27\lib\site-packages\django\template\defaulttags.py", line 216,
in render
nodelist.append(node.render_annotated(context))
File "C:\Python27\lib\site-packages\django\template\base.py", line 957, in ren
der_annotated
return self.render(context)
File "C:\Python27\lib\site-packages\django\template\defaulttags.py", line 322,
in render
return nodelist.render(context)
File "C:\Python27\lib\site-packages\django\template\base.py", line 990, in ren
der
bit = node.render_annotated(context)
File "C:\Python27\lib\site-packages\django\template\base.py", line 957, in ren
der_annotated
return self.render(context)
File "C:\Python27\lib\site-packages\django\template\defaulttags.py", line 322,
in render
return nodelist.render(context)
File "C:\Python27\lib\site-packages\django\template\base.py", line 990, in ren
der
bit = node.render_annotated(context)
File "C:\Python27\lib\site-packages\django\template\base.py", line 957, in ren
der_annotated
return self.render(context)
File "C:\Python27\lib\site-packages\django\template\base.py", line 1040, in re
nder
output = self.filter_expression.resolve(context)
File "C:\Python27\lib\site-packages\django\template\base.py", line 708, in res
olve
obj = self.var.resolve(context)
File "C:\Python27\lib\site-packages\django\template\base.py", line 849, in res
olve
value = self._resolve_lookup(context)
File "C:\Python27\lib\site-packages\django\template\base.py", line 890, in _re
solve_lookup
current = getattr(current, bit)
File "C:\Python27\lib\site-packages\debug_toolbar\panels\__init__.py", line 96
, in content
return render_to_string(self.template, self.get_stats())
File "C:\Python27\lib\site-packages\django\template\loader.py", line 68, in re
nder_to_string
return template.render(context, request)
File "C:\Python27\lib\site-packages\django\template\backends\django.py", line
66, in render
return self.template.render(context)
File "C:\Python27\lib\site-packages\django\template\base.py", line 207, in ren
der
return self._render(context)
File "C:\Python27\lib\site-packages\django\test\utils.py", line 107, in instru
mented_test_render
return self.nodelist.render(context)
File "C:\Python27\lib\site-packages\django\template\base.py", line 990, in ren
der
bit = node.render_annotated(context)
File "C:\Python27\lib\site-packages\django\template\base.py", line 957, in ren
der_annotated
return self.render(context)
File "C:\Python27\lib\site-packages\django\template\defaulttags.py", line 322,
in render
return nodelist.render(context)
File "C:\Python27\lib\site-packages\django\template\base.py", line 990, in ren
der
bit = node.render_annotated(context)
File "C:\Python27\lib\site-packages\django\template\base.py", line 957, in ren
der_annotated
return self.render(context)
File "C:\Python27\lib\site-packages\django\template\defaulttags.py", line 216,
in render
nodelist.append(node.render_annotated(context))
File "C:\Python27\lib\site-packages\django\template\base.py", line 957, in ren
der_annotated
return self.render(context)
File "C:\Python27\lib\site-packages\django\template\defaulttags.py", line 458,
in render
url = reverse(view_name, args=args, kwargs=kwargs, current_app=current_app)
File "C:\Python27\lib\site-packages\django\urls\base.py", line 87, in reverse
raise NoReverseMatch("%s is not a registered namespace" % key)
NoReverseMatch: u'djdt' is not a registered namespace
----------------------------------------------------------------------
Ran 1 test in 0.085s
FAILED (errors=1)
Destroying test database for alias 'default'...
Python: 2.7.14
django: 1.11.9
Django-Debug-Toolbar: 1.9.1
# -*- coding: utf-8 -*-
from __future__ import unicode_literals
from django.test import TestCase
from django.core.urlresolvers import reverse
# Create your tests here.
class MyTests(TestCase):
def test_list(self):
response = self.client.get(reverse('list'))
self.assertEqual(response.status_code, 200)
Gibt es Neuigkeiten zu diesem Thema?
Der Django-Test-Runner setzt zwangsweise DEBUG=False
, was bedeutet, dass die URL-Muster der Debug-Symbolleiste nicht verfügbar sind.
Versuchen Sie, die Middleware von MIDDLEWARE
zu entfernen, wenn Sie Tests ausführen. Außerdem würde ich mich über einen Dokumentations-Patch freuen, wenn der Vorschlag gut funktioniert.
Auf das gleiche Problem gestoßen. In meinem Fall habe ich SHOW_TOOLBAR_CALLBACK
überschrieben, um den Wert von DEBUG
zurückzugeben. Die Problemumgehung besteht darin, django.conf.settings
zu importieren und stattdessen settings.DEBUG
zurückzugeben.
Gibt es dazu irgendwelche Updates?
Ich musste dies tun:
settings.py
TESTING_MODE = 'test' in sys.argv
urls.py
if settings.DEBUG or settings.TESTING_MODE:
import debug_toolbar
urlpatterns += [
url(r'^__debug__/', include(debug_toolbar.urls)),
]
Es ist ein sehr frustrierendes Verhalten. Ich schätze, vielleicht gibt es andere Problemumgehungen, aber das war jetzt genug.
Ich habe die SamMorrowDrums-Lösung ausprobiert und obwohl sie bei mir nicht funktioniert hat, funktioniert diese optimierte Version, die auf seiner Idee basiert, einwandfrei:
settings.py
import sys
DEBUG = True
TESTING_MODE = 'test' in sys.argv
DEV_MODE = DEBUG and not TESTING_MODE
if DEV_MODE:
INSTALLED_APPS += [
'debug_toolbar'
]
MIDDLEWARE += ['debug_toolbar.middleware.DebugToolbarMiddleware', ]
# DEBUG TOOLBAR SETTINGS:
DEBUG_TOOLBAR_PANELS = [
'debug_toolbar.panels.versions.VersionsPanel',
'debug_toolbar.panels.timer.TimerPanel',
'debug_toolbar.panels.settings.SettingsPanel',
'debug_toolbar.panels.headers.HeadersPanel',
'debug_toolbar.panels.request.RequestPanel',
'debug_toolbar.panels.sql.SQLPanel',
'debug_toolbar.panels.staticfiles.StaticFilesPanel',
'debug_toolbar.panels.templates.TemplatesPanel',
'debug_toolbar.panels.cache.CachePanel',
'debug_toolbar.panels.signals.SignalsPanel',
'debug_toolbar.panels.logging.LoggingPanel',
'debug_toolbar.panels.redirects.RedirectsPanel',
]
def show_toolbar(request):
return True
DEBUG_TOOLBAR_CONFIG = {
'INTERCEPT_REDIRECT': False,
'SHOW_TOOLBAR_CALLBACK': show_toolbar,
}
urls.py
from django.conf import settings
if settings.DEV_MODE:
import debug_toolbar
urlpatterns += [
path('__debug__/', include(debug_toolbar.urls)),
]
Sie können auch einfach den Standardrückruf zum Anzeigen der django-debug-toolbar überschreiben.
Versuchen Sie es in Ihrer settings.py so einzustellen
INTERNAL_IPS = ['127.0.0.1']
DEBUG_TOOLBAR_CONFIG = {
'SHOW_TOOLBAR_CALLBACK': lambda r: r.environ.get('SERVER_NAME', None) != 'testserver' and (r.META.get('REMOTE_ADDR', None) in INTERNAL_IPS)
}
... oder jede andere Methode zur Überprüfung von "ist Testanfragen"
Kann jemand dies reproduzieren, um zu bestätigen, dass dies immer noch ein Problem ist? Ich konnte es nicht reproduzieren.
Kann jemand dies reproduzieren, um zu bestätigen, dass dies immer noch ein Problem ist? Ich konnte es nicht reproduzieren.
Hallo, ich stehe auch immer noch vor diesem Problem. Mit django-debug-toolbar==2.2
und Django==2.1.8
Könnte dies an einer etwas älteren Django-Version liegen?
View funktioniert gut, wenn es normal aufgerufen wird, aber wenn es einen Test python manage.py test
ausführt, wird es ausgelöst
django.request: ERROR: Internal Server Error: /order_platform/photo_import/
Traceback (most recent call last):
File "/usr/local/lib/python3.6/site-packages/django/urls/base.py", line 75, in reverse
extra, resolver = resolver.namespace_dict[ns]
KeyError: 'djdt'
During handling of the above exception, another exception occurred:
Traceback (most recent call last):
File "/usr/local/lib/python3.6/site-packages/django/core/handlers/exception.py", line 34, in inner
response = get_response(request)
File "/usr/local/lib/python3.6/site-packages/debug_toolbar/middleware.py", line 99, in __call__
bits[-2] += toolbar.render_toolbar()
File "/usr/local/lib/python3.6/site-packages/debug_toolbar/toolbar.py", line 69, in render_toolbar
return render_to_string("debug_toolbar/base.html", context)
File "/usr/local/lib/python3.6/site-packages/django/template/loader.py", line 62, in render_to_string
return template.render(context, request)
File "/usr/local/lib/python3.6/site-packages/django/template/backends/django.py", line 61, in render
return self.template.render(context)
File "/usr/local/lib/python3.6/site-packages/django/template/base.py", line 171, in render
return self._render(context)
File "/usr/local/lib/python3.6/site-packages/django/test/utils.py", line 96, in instrumented_test_render
return self.nodelist.render(context)
File "/usr/local/lib/python3.6/site-packages/django/template/base.py", line 937, in render
bit = node.render_annotated(context)
File "/usr/local/lib/python3.6/site-packages/django/template/base.py", line 904, in render_annotated
return self.render(context)
File "/usr/local/lib/python3.6/site-packages/django/template/defaulttags.py", line 309, in render
return nodelist.render(context)
File "/usr/local/lib/python3.6/site-packages/django/template/base.py", line 937, in render
bit = node.render_annotated(context)
File "/usr/local/lib/python3.6/site-packages/django/template/base.py", line 904, in render_annotated
return self.render(context)
File "/usr/local/lib/python3.6/site-packages/django/template/defaulttags.py", line 442, in render
url = reverse(view_name, args=args, kwargs=kwargs, current_app=current_app)
File "/usr/local/lib/python3.6/site-packages/django/urls/base.py", line 86, in reverse
raise NoReverseMatch("%s is not a registered namespace" % key)
django.urls.exceptions.NoReverseMatch: 'djdt' is not a registered namespace
Das ist mein settings.py
if DEBUG:
...
INSTALLED_APPS += ["debug_toolbar"]
# include as early as possible
MIDDLEWARE = ["debug_toolbar.middleware.DebugToolbarMiddleware"] + MIDDLEWARE
DEBUG_TOOLBAR_PANELS = [
"ddt_request_history.panels.request_history.RequestHistoryPanel",
"debug_toolbar.panels.versions.VersionsPanel",
"debug_toolbar.panels.timer.TimerPanel",
"debug_toolbar.panels.settings.SettingsPanel",
"debug_toolbar.panels.headers.HeadersPanel",
"debug_toolbar.panels.request.RequestPanel",
"debug_toolbar.panels.sql.SQLPanel",
"debug_toolbar.panels.staticfiles.StaticFilesPanel",
"debug_toolbar.panels.templates.TemplatesPanel",
"debug_toolbar.panels.cache.CachePanel",
"debug_toolbar.panels.signals.SignalsPanel",
"debug_toolbar.panels.logging.LoggingPanel",
"debug_toolbar.panels.redirects.RedirectsPanel",
]
INSTALLED_APPS += ["django_nose"]
DEBUG_TOOLBAR_CONFIG = {"SHOW_TOOLBAR_CALLBACK": lambda request: True}
TEST_RUNNER = "django_nose.NoseTestSuiteRunner"
@shydefoo Sie können Ihre Anwendung so konfigurieren, dass die Symbolleiste während Tests über eine Umgebungsvariable nicht eingeschlossen wird. Eine andere Möglichkeit besteht darin, Ihre Tests mit DEBUG
auf False
$ gesetzt auszuführen, obwohl dies davon ausgeht, dass Sie die Symbolleiste immer noch von der Installation ausschließen.
@tim-schilling Ja, das habe ich gemacht. Anscheinend war SHOW_TOOLBBAR_CALLBACK
das Problem.
Hilfreichster Kommentar
Auf das gleiche Problem gestoßen. In meinem Fall habe ich
SHOW_TOOLBAR_CALLBACK
überschrieben, um den Wert vonDEBUG
zurückzugeben. Die Problemumgehung besteht darin,django.conf.settings
zu importieren und stattdessensettings.DEBUG
zurückzugeben.