将 django-debug 添加到 App 后,得到“'djdt' is not a registered namespace”

After adding django-debug to App, getting "'djdt' is not a registered namespace"

我的问题是关于设置使用 django-debug。 安装工具栏和面板并在我的应用程序中启用它们后出现上述错误。我已经看到很多关于这个问题或一个密切相关的问题的建议,但我尝试过的任何事情都没有帮助。

/usr/lib/python3.6/site-packages/debug_toolbar/templates/debug_toolbar/base.html 模板渲染期间的特定错误来自:

16       data-render-panel-url="{% url 'djdt:render_panel' %}"

我的相关 settings.py 条目:

DEBUG = True
INSTALLED_APPS = [
    'debug_toolbar',
    'debug_panel',
    ...
]
MIDDLEWARE = [
    'debug_toolbar.middleware.DebugToolbarMiddleware',
    'debug_panel.middleware.DebugPanelMiddleware',
    ...
]
INTERNAL_IPS = ['127.0.0.1',]

附加到我的 urls.py:

if settings.DEBUG:
    try:
        import debug_toolbar
        urlpatterns += [url(r'^__debug__/', include(debug_toolbar.urls))]
    except ImportError:
        pass

我尝试过的:

感谢任何进一步的建议。

您似乎同时使用了 debug_toolbardebug_panel 在调试面板的 documentation 中提到您需要删除 debug_toolbar

Replace the Django Debug Toolbar middleware with the Django Debug Panel one.

替换:

MIDDLEWARE_CLASSES = (
    ...
    'debug_toolbar.middleware.DebugToolbarMiddleware',
    ...
)

与:

MIDDLEWARE_CLASSES = (
    ...
    'debug_panel.middleware.DebugPanelMiddleware',
    ...
)

我建议不要使用 django-debug-panel,因为它没有得到积极维护。它最后一次修改是在 3 年前。

您需要手动添加 'djdt' 路由到 urls.py 的末尾(如果您在应用中使用 'namespace',请将以下代码添加到项目中的 'urls.py' ):

if settings.DEBUG:
    import debug_toolbar

    urlpatterns += [
        url(r'^__debug__/', include(debug_toolbar.urls)),
    ]

如果我们将 DEBUG 设置为 False 时出现此问题,则只需从列表中删除 debugtoolbar 中间件即可解决问题。

  • settings.py
MIDDLEWARE = [
    'debug_toolbar.middleware.DebugToolbarMiddleware',
    'django.middleware.security.SecurityMiddleware',
    'django.contrib.sessions.middleware.SessionMiddleware',
    'django.middleware.common.CommonMiddleware',
    'django.middleware.csrf.CsrfViewMiddleware',
    'django.contrib.auth.middleware.AuthenticationMiddleware',
    'django.contrib.messages.middleware.MessageMiddleware',
    'django.middleware.clickjacking.XFrameOptionsMiddleware',
]

if DEBUG is False:
    del MIDDLEWARE[0]
  • urls.py
from django.conf import settings
from django.conf.urls import include

...

if settings.DEBUG:
    import debug_toolbar
    urlpatterns = [
        path('__debug__/', include(debug_toolbar.urls)),
    ] + urlpatterns

错误是由于我们声明了它的中间部分,但是在 DEBUG = FALSE 的情况下模块没有导入。所以,只需检查添加它的中间部分,以防 DEDEUG 设置为 TRUE

settings.py

MIDDLEWARE = [
    ...
    'django.middleware.security.SecurityMiddleware',
    'django.contrib.sessions.middleware.SessionMiddleware',
    'django.middleware.common.CommonMiddleware',
    'django.middleware.csrf.CsrfViewMiddleware',
    'django.contrib.auth.middleware.AuthenticationMiddleware',
    'django.contrib.messages.middleware.MessageMiddleware',
    'django.middleware.clickjacking.XFrameOptionsMiddleware',
....
]

if DEBUG:
    
    MIDDLEWARE = ['debug_toolbar.middleware.DebugToolbarMiddleware'] + MIDDLEWARE

urls.py

if settings.DEBUG:
    import debug_toolbar
    urlpatterns = [
        path('__debug__/', include(debug_toolbar.urls)),
    ] + urlpatterns

请确保将以下内容放在项目的末尾 urls.py 而不是应用程序 urls.py

if settings.DEBUG:
    import debug_toolbar

    urlpatterns += [
        path('__debug__/', include(debug_toolbar.urls)),
    ]

还要确保在 settings.py

中添加以下内容
if DEBUG:

    MIDDLEWARE += (
        'debug_toolbar.middleware.DebugToolbarMiddleware',
    )
    INSTALLED_APPS += (
        'debug_toolbar',
    )
    INTERNAL_IPS = ('127.0.0.1',)
    DEBUG_TOOLBAR_CONFIG = {
        'INTERCEPT_REDIRECTS': False,
    }