156

我看了其他问题,无法弄清楚...

我做了以下安装 django-debug-toolbar:

  1. pip install django-debug-toolbar
  2. 添加到中间件类:
MIDDLEWARE_CLASSES = (
    'django.middleware.common.CommonMiddleware',
    'django.contrib.sessions.middleware.SessionMiddleware',
    'django.middleware.csrf.CsrfViewMiddleware',
    'django.contrib.auth.middleware.AuthenticationMiddleware',
    'django.contrib.messages.middleware.MessageMiddleware',
    # Uncomment the next line for simple clickjacking protection:
    # 'django.middleware.clickjacking.XFrameOptionsMiddleware',
    'debug_toolbar.middleware.DebugToolbarMiddleware',
)

3 添加了 INTERNAL_IPS:

INTERNAL_IPS = ('174.121.34.187',)

4 添加 debug_toolbar 到已安装的应用程序

我没有收到任何错误或任何东西,工具栏没有出现在任何页面上,甚至没有出现在管理员页面上。

我什至将 debug_toolbar 模板的目录添加到我的TEMPLATE_DIRS

4

33 回答 33

204

愚蠢的问题,但你没有提到它,所以......DEBUG设置什么?它不会加载,除非它是True.

如果它仍然不起作用,请尝试添加“127.0.0.1” INTERNAL_IPS

更新

这是最后的努力,您不应该这样做,但它会清楚地显示是否只是一些配置问题或是否存在一些更大的问题。

将以下内容添加到 settings.py:

def show_toolbar(request):
    return True
SHOW_TOOLBAR_CALLBACK = show_toolbar

这将有效地删除调试工具栏的所有检查,以确定它是否应该自行加载;它总是会加载。仅将其保留用于测试目的,如果您忘记并使用它启动,所有访问者也将看到您的调试工具栏。

有关显式配置,另请参阅此处的官方安装文档。

编辑(2015 年 6 月 17 日):

显然,核选项的语法已经改变。它现在在自己的字典中:

def show_toolbar(request):
    return True
DEBUG_TOOLBAR_CONFIG = {
    "SHOW_TOOLBAR_CALLBACK" : show_toolbar,
}

他们的测试使用这本词典。

于 2012-05-09T14:21:03.530 回答
92

调试工具栏希望将 request.META['REMOTE_ADDR'] 中的 ip 地址设置在 INTERNAL_IPS 设置中。在您的一个视图中添加打印语句,如下所示:

print("IP Address for debug-toolbar: " + request.META['REMOTE_ADDR'])

然后加载该页面。确保 IP 在 settings.py 中的 INTERNAL_IPS 设置中。

通常,我认为您可以通过查看计算机的 ip 地址轻松确定地址,但在我的情况下,我在带有端口转发的 Virtual Box 中运行服务器......谁知道发生了什么。尽管在 VB 或我自己的操作系统上的 ifconfig 中没有看到它,但 REMOTE_ADDR 键中显示的 IP 是激活工具栏的诀窍。

于 2013-02-04T22:43:01.773 回答
57

如果其他一切正常,也可能是您的模板缺少显式结束<body>标记——</p>

注意:只有当响应的 mimetype 是 text/html 或 application/xhtml+xml 并且包含结束标记时,调试工具栏才会显示自己。

于 2012-09-09T15:55:37.447 回答
34

码头工人

如果您在带有 docker 的Docker容器中使用 Django 服务器进行开发,则启用工具栏的说明不起作用。原因与您需要添加的实际地址将INTERNAL_IPS是动态地址有关,例如 172.24.0.1。而不是尝试动态设置 的值INTERNAL_IPS,直接的解决方案是替换启用工具栏的功能,settings.py例如:

DEBUG_TOOLBAR_CONFIG = {
    'SHOW_TOOLBAR_CALLBACK': lambda _request: DEBUG
}

这也适用于其他动态路由情况,例如 Vagrant 或 Heroku。

这里有一些更多的细节供好奇的人参考。django_debug_tool 中决定是否显示工具栏的代码检查如下的值REMOTE_ADDR

if request.META.get('REMOTE_ADDR', None) not in INTERNAL_IPS:
       return False

因此,如果REMOTE_ADDR由于动态 docker 路由而实际上不知道 的值,则工具栏将不起作用。您可以使用 docker network 命令查看动态 IP 值,例如 docker network inspect my_docker_network_name

于 2018-05-23T15:19:11.207 回答
32

当前的稳定版本 0.11.0 需要满足以下条件才能显示工具栏:

设置文件:

  1. DEBUG = True
  2. INTERNAL_IPS包括您的浏览器 IP 地址,而不是服务器地址。如果在本地浏览,这应该是INTERNAL_IPS = ('127.0.0.1',). 如果远程浏览,只需指定您的公共地址
  3. 要安装的 debug_toolbar 应用程序,即INSTALLED_APPS = (..., 'debug_toolbar',)
  4. 要添加的调试工具栏中间件类,即MIDDLEWARE_CLASSES = ('debug_toolbar.middleware.DebugToolbarMiddleware', ...). 它应该尽可能早地放在列表中。

模板文件:

  1. 必须是类型text/html
  2. 必须有一个结束</html>标签

静态文件:

如果您提供静态内容,请确保通过以下方式收集 css、js 和 html:

./manage.py collectstatic 


关于即将发布的 django-debug-toolbar 版本的注意事项

较新的开发版本为设置点 2、3 和 4 添加了默认值,这使生活更简单一些,但是,与任何开发版本一样,它都有错误。我发现ImproperlyConfigured通过 nginx/uwsgi 运行时来自 git 的最新版本导致错误。

无论哪种方式,如果您想从 github 安装最新版本,请运行:

pip install -e git+https://github.com/django-debug-toolbar/django-debug-toolbar.git#egg=django-debug-toolbar 

您还可以通过执行以下操作克隆特定提交:

pip install -e git+https://github.com/django-debug-toolbar/django-debug-toolbar.git@ba5af8f6fe7836eef0a0c85dd1e6d7418bc87f75#egg=django_debug_toolbar
于 2013-12-05T21:30:57.237 回答
26

我尝试了一切,从设置DEBUG = True到设置INTERNAL_IPS到客户端的 IP 地址,甚至手动配置 Django 调试工具栏(请注意,最近的版本会自动进行所有配置,例如添加中间件和 URL)。在远程开发服务器中没有任何工作(尽管它在本地工作)。唯一有效的方法是按如下方式配置工具栏:

DEBUG_TOOLBAR_CONFIG = {
    "SHOW_TOOLBAR_CALLBACK" : lambda request: True,
}

这取代了决定是否应显示工具栏的默认方法,并始终返回 true。

于 2016-05-04T12:29:15.817 回答
15

我的工具栏工作得非常完美。使用此配置:

  1. DEBUG = True
  2. INTERNAL_IPS = ('127.0.0.1', '192.168.0.1',)
  3. DEBUG_TOOLBAR_CONFIG = {'INTERCEPT_REDIRECTS': False,}
  4. 中间件是第一个元素MIDDLEWARE_CLASSES
MIDDLEWARE_CLASSES = (
    'debug_toolbar.middleware.DebugToolbarMiddleware',
    'django.middleware.common.CommonMiddleware',
    'django.contrib.sessions.middleware.SessionMiddleware',
    'django.middleware.csrf.CsrfViewMiddleware',
    'django.contrib.auth.middleware.AuthenticationMiddleware',
    'django.contrib.messages.middleware.MessageMiddleware',
)

我希望它有帮助

于 2012-05-09T14:30:07.223 回答
12

在 Windows 上添加10.0.2.2到您的 INTERNAL_IPS,它在内部与 vagrant 一起使用

INTERNAL_IPS = ('10.0.2.2', )

这应该有效。

于 2014-10-20T19:05:40.957 回答
6

我遇到了同样的问题,经过一番谷歌搜索后终于解决了。

在 INTERNAL_IPS 中,您需要有客户端的IP 地址。

于 2012-08-29T06:28:56.057 回答
4

可能导致工具栏保持隐藏状态的另一件事是它找不到所需的静态文件。debug_toolbar 模板使用 {{ STATIC_URL }} 模板标签,因此请确保静态文件中有一个名为 debug toolbar 的文件夹。

collectstatic 管理命令应该在大多数安装中处理这个问题。

于 2013-11-01T13:41:39.803 回答
3

我尝试了pydanny 的 cookiecutter-django的配置,它对我有用:

# django-debug-toolbar
MIDDLEWARE_CLASSES = Common.MIDDLEWARE_CLASSES + ('debug_toolbar.middleware.DebugToolbarMiddleware',)
INSTALLED_APPS += ('debug_toolbar',)

INTERNAL_IPS = ('127.0.0.1',)

DEBUG_TOOLBAR_CONFIG = {
    'DISABLE_PANELS': [
        'debug_toolbar.panels.redirects.RedirectsPanel',
    ],
    'SHOW_TEMPLATE_CONTEXT': True,
}
# end django-debug-toolbar

我只是通过添加'debug_toolbar.apps.DebugToolbarConfig'而不是官方 django-debug-toolbar 文档'debug_toolbar'中提到的来修改它,因为我使用的是 Django 1.7。

于 2014-10-05T21:57:59.813 回答
3

对先前答案的补充:

如果工具栏没有显示,但它在 html 中加载(在浏览器中检查您的站点 html,向下滚动)

问题可能是找不到调试工具栏静态文件(您也可以在站点的访问日志中看到这一点,例如 /static/debug_toolbar/js/toolbar.js 的 404 错误)

然后可以通过以下方式修复它(nginx和apache的示例):

nginx配置:

location ~* ^/static/debug_toolbar/.+.(ico|css|js)$ {
    root [path to your python site-packages here]/site-packages/debug_toolbar;
}

阿帕奇配置:

Alias /static/debug_toolbar [path to your python site-packages here]/site-packages/debug_toolbar/static/debug_toolbar

或者:

manage.py collectstatic

更多关于 collectstatic 的信息:https ://docs.djangoproject.com/en/dev/ref/contrib/staticfiles/#collectstatic

或手动将 debug_toolbar 静态文件的 debug_toolbar 文件夹移动到您设置的静态文件文件夹

于 2014-09-29T21:32:55.520 回答
3

我知道这个问题有点老了,但是今天我用 docker 安装了 django-toolbar 并遇到了同样的问题,这为我解决了

INTERNAL_IPS = ["127.0.0.1", "10.0.2.2"]

import socket
hostname, _, ips = socket.gethostbyname_ex(socket.gethostname())
INTERNAL_IPS += [".".join(ip.split(".")[:-1] + ["1"]) for ip in ips]

正如我在评论中读到的,问题是 docker 使用动态 ip,为了解决这个问题,我们可以从上面的代码中获取 ip

于 2020-07-31T19:31:27.257 回答
3

Django 1.8.5:

我必须将以下内容添加到项目 url.py 文件中才能显示调试工具栏。之后显示调试工具栏。

 from django.conf.urls import include
 from django.conf.urls import patterns
 from django.conf import settings


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

django 1.10:及更高版本:

from django.conf.urls import include, url
from django.conf.urls import patterns
from django.conf import settings


if settings.DEBUG:

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

也不要忘记将 debug_toolbar 包含到您的中间件中。调试工具栏主要在中间件中实现。在您的设置模块中启用它,如下所示:(django 较新版本)


MIDDLEWARE = [
# ...
'debug_toolbar.middleware.DebugToolbarMiddleware',
#

旧式中间件:(中间件需要有_CLASSES键)

MIDDLEWARE_CLASSES = [
# ...
'debug_toolbar.middleware.DebugToolbarMiddleware',
# ...
]
于 2017-01-01T20:47:27.787 回答
2

In my case, it was another problem that hasn't been mentioned here yet: I had GZipMiddleware in my list of middlewares.

As the automatic configuration of debug toolbar puts the debug toolbar's middleware at the top, it only gets the "see" the gzipped HTML, to which it can't add the toolbar.

I removed GZipMiddleware in my development settings. Setting up the debug toolbar's configuration manually and placing the middleware after GZip's should also work.

于 2014-10-15T20:40:15.070 回答
2

127.0.0.1:8000对我来说,这就像在地址栏中输入一样简单,而不是localhost:8000显然与 INTERNAL_IPS 不匹配。

于 2014-01-17T15:43:46.553 回答
2

在我的情况下,我只需要删除 python 编译文件(*.pyc

于 2016-05-09T11:57:08.777 回答
1

对于这个特定的作者来说,情况并非如此,但我一直在为调试工具栏不显示而苦苦挣扎,在做了他们指出的一切之后,我发现这是 MIDDLEWARE 顺序的问题。因此,将中间件放在列表的前面可能会起作用。我的是第一个:

MIDDLEWARE_CLASSES = ( 'debug_toolbar.middleware.DebugToolbarMiddleware', 'django.middleware.common.CommonMiddleware', 'django.contrib.sessions.middleware.SessionMiddleware', 'django.middleware.csrf.CsrfViewMiddleware', 'django.contrib.auth.middleware.AuthenticationMiddleware', 'django.contrib.messages.middleware.MessageMiddleware', 'dynpages.middleware.DynpageFallbackMiddleware', 'utils.middleware.UserThread', )

于 2013-05-02T09:37:29.567 回答
1

我遇到了同样的问题,我通过查看 Apache 的错误日志解决了它。我用 mod_wsgi 在 mac os x 上运行了 apache debug_toolbar 的 tamplete 文件夹没有被加载

日志样本:

==> /private/var/log/apache2/dummy-host2.example.com-error_log <==
[Sun Apr 27 23:23:48 2014] [error] [client 127.0.0.1] File does not exist: /Library/WebServer/Documents/rblreport/rbl/static/debug_toolbar, referer: http://127.0.0.1/

==> /private/var/log/apache2/dummy-host2.example.com-access_log <==
127.0.0.1 - - [27/Apr/2014:23:23:48 -0300] "GET /static/debug_toolbar/css/toolbar.css HTTP/1.1" 404 234 "http://127.0.0.1/" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10.9; rv:28.0) Gecko/20100101 Firefox/28.0"

我只是将这一行添加到我的 VirtualHost 文件中:

Alias /static/debug_toolbar /Library/Python/2.7/site-packages/debug_toolbar/static/debug_toolbar
  • 当然你必须改变你的python路径
于 2014-04-28T02:41:49.557 回答
1

这个对我有用。

#urls.py
if settings.DEBUG:
    from django.conf.urls.static import static
    import debug_toolbar
    import mimetypes

    mimetypes.add_type("application/javascript", ".js", True)

    urlpatterns += static(settings.STATIC_URL, document_root=settings.STATIC_ROOT)
    urlpatterns += static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)

    urlpatterns = [path('__debug__/', include(debug_toolbar.urls)), ] + urlpatterns
于 2020-12-11T19:11:24.237 回答
1
  1. 就像你说的那样,我已经配置了文档中所说的所有内容,但 debug_toolbar 仍然没有出现。然后我在 Firefox 中试了一下,效果很好。

  2. 然后从 chrome,我检查网页并更改类名 class="djdt-hidden"。您可以尝试更改或删除它。

  3. 运行 manage.py collectstatic 并重复上述步骤

  4. 实际上,您可以通过编辑跳过步骤 2 和 3

    .djdt-hidden{ display: none;}

    从路径

    debug_toolbar/static/debug_toolbar/css/toolbar.css

  5. 在 settings.py 中的某处添加这两行

    import mimetypes

    mimetypes.add_type("application/javascript", ".js", True)

  6. 在 urls.py

    import debug_toolbar

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

  7. 使用参考django调试工具栏安装

  1. 如果它仍然不起作用,请创建 launch.json 并提及不同的端口号以进行调试

` {

"version": "0.2.0",
"configurations": [
    
    {
        "name": "Python: Django",
        "type": "python",
        "request": "launch",
        "program": "${workspaceFolder}\\manage.py",
        "args": [
            "runserver",
            "9000",
        ],
        "django": true
    }
]

} `

于 2021-12-09T21:42:34.443 回答
0

你必须确保你的模板中有一个结束标签。

我的问题是我的模板中没有常规的 html 标签,我只是以纯文本显示内容。我通过从具有标签的 base.html 继承每个 html 文件来解决它。

于 2013-06-21T18:10:15.273 回答
0

我在使用 Vagrant 时遇到了同样的问题。我通过添加::ffff:192.168.33.1到 INTERNAL_IPS 来解决这个问题,如下例所示。

INTERNAL_IPS = (
    '::ffff:192.168.33.1',
)

请记住,这192.168.33.10是我在 Vagrantfile 中的专用网络中的 IP。

于 2015-05-06T20:11:24.197 回答
0

对于使用 Pycharm 5 的任何人 - 模板调试在某些版本中不起作用。已在 5.0.4 中修复,受影响的版本- 5.0.1、5.0.2 签出问题

花很多时间来找出答案。也许会帮助某人

于 2016-04-14T20:42:54.860 回答
0

在我正在处理的代码中,在处理主请求期间发出了多个小请求(这是非常具体的用例)。它们是由同一个 Django 线程处理的请求。Django 调试工具栏 (DjDT) 不会出现这种行为,并在第一个响应中包含 DjDT 的工具栏,然后它会删除线程的状态。因此,当主请求被发送回浏览器时,响应中不包含 DjDT。

经验教训:DjDT 保存每个线程的状态。它在第一次响应后删除线程的状态。

于 2018-10-19T11:52:28.540 回答
0

我遇到了这个问题,不得不从源代码安装调试工具栏。

如果您使用 PureCSS 和其他 CSS 框架,那么 1.4 版会出现隐藏问题。

是修复该问题的提交。

文档解释了如何从源代码安装。

于 2016-04-10T16:44:10.120 回答
0

如果您使用的是 Windows,它可能来自您的注册表。将 HKEY_CLASSES_ROOT.js\Content Type 设置为 text/javascript 而不是 text/plain。

于 2021-09-27T20:02:20.813 回答
0

经过多次试验和错误,这在 Django=3.1 中对我有用。在编写完所有 internal_ip、中间件、附加到 url 之后,将此代码放在下面的 settings.py 中

def show_toolbar(request):
return True


DEBUG_TOOLBAR_CONFIG = {
"SHOW_TOOLBAR_CALLBACK": show_toolbar,
'INSERT_BEFORE': '</head>'
}

他们中的许多人建议 SHOW_TOOLBAR_​​CALLBACK,但就我而言,它仅在添加“INSERT_BEFORE”后才有效

于 2020-11-07T09:54:08.040 回答
0

添加后有同样的问题

urls.py
mimetypes.add_type("application/javascript", ".js", True)
urlpatterns = [...

DEBUG_TOOLBAR_CONFIG = {
 'INTERCEPT_REDIRECTS': False,
 'SHOW_TOOLBAR_CALLBACK': lambda request: True,
 'SHOW_TEMPLATE_CONTEXT': True,
 'INSERT_BEFORE': '</head>'
}

添加了 javascripts 文件,但所有标签都有类djdt-hidden和隐藏

<div id="djDebug" class="djdt-hidden" dir="ltr" data-default-show="true">

我正在使用GoogleChrome

错误已修复并出现FireFoxdjango 工具栏图标

于 2021-02-17T18:07:13.630 回答
0

运行以下命令:

python manage.py migrate

现在再次运行服务器

于 2021-12-07T14:54:10.740 回答
0

什么让我是一个过时的浏览器!

注意到它从调试工具栏加载了一些样式表,并猜测它可能是前端问题。

于 2019-04-06T23:19:48.050 回答
0

一切都完成了,但在 Chrome 中没有显示“django 调试工具栏”。

Chrome 控制台:无法加载模块脚本:需要 JavaScript 模块脚本,但服务器以 MIME 类型“文本/纯文本”响应。根据 HTML 规范对模块脚本强制执行严格的 MIME 类型检查。(工具栏.js;1)

在 EDGE 中,显示的工具栏与服务器和 url 完全相同。

于 2021-12-28T16:04:52.653 回答
-1

一件愚蠢的事情让我..如果您使用 apache wsgi,请记住触摸 .wsgi 文件以强制重新编译您的代码。只是浪费我 20 分钟的时间来调试这个愚蠢的错误:(

于 2013-02-02T17:42:47.573 回答