没有显示 django-debug-toolbar

我看了其他的问题,想不通..。

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

  1. Pip 安装 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

78168 次浏览

DEBUG设置为什么? 除非它是 True,否则它不会加载。

如果它仍然不工作,尝试添加’127.0.0.1’到 INTERNAL_IPS以及。

更新

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

向 setings.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,
}

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

我的工具栏工作正常,配置如下:

  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',
)

希望能有所帮助

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

在 INTERNAL _ IPS 中,需要有 客户的 IP 地址。

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

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

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

调试工具栏希望在 INTERNAL _ IPS 设置中设置 request.META [‘ REMOTE _ ADDR’]中的 ip 地址。在你的观点中加入如下印刷声明:

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

然后加载该页面。请确保 IP 位于 setings.py 中的 INTERNAL _ IPS 设置中。

通常情况下,我认为你可以通过查看计算机的 IP 地址轻松地确定地址,但在我的情况下,我运行的服务器在一个虚拟盒子与端口转发... 谁知道发生了什么。尽管在 VB 或我自己的操作系统的 ifconfig 中没有看到它,但是显示在 REMOTE _ ADDR 键中的 IP 是激活工具栏的关键。

这不是这个特定的作者的情况,但我只是一直与调试工具栏不显示和做了一切后,他们指出,我发现这是一个问题与中间件的顺序。因此,将中间件放在列表的前面是可行的。我的是第一个:

中间件 _ 类 = ( ‘ debug _ toolbar. middleware. DebugToolbarMiddleware’, “ django 中间件,通用中间件” “ django. Contrib.sessions.middleware. SessionMiddleware” 中间件, 中间件, 中间件, 中间件 DynpageFallbackMiddleware, “ utils.midware. UserThread” )

您必须确保在您的模板中有一个结束标记。

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

另一个可能导致工具栏保持隐藏状态的原因是它找不到所需的静态文件。Debug _ toolbar 模板使用\{\{ STATIC _ URL }}模板标记,因此请确保在静态文件中有一个名为 debug toolbar 的文件夹。

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

当前的稳定版本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的默认值,这使生活变得简单了一些,但是,与任何开发版本一样,它也存在缺陷。我发现 git 的最新版本在运行 nginx/uwsgi 时导致 ImproperlyConfigured错误。

无论哪种方式,如果你想从 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

对我来说,这很简单,只需在地址栏中键入 127.0.0.1:8000,而不是显然不匹配 INTERNAL _ IPS 的 localhost:8000

我也遇到了同样的问题,我通过查看 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 路径

以下是对以往答案的补充:

如果工具栏没有显示,但是它加载在 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;
}

Apache 配置:

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 文件夹移动到 set static files 文件夹

我尝试了 Pydanny 的饼干切割机,姜戈的配置,它对我很有效:

# 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。

在我的例子中,这是另一个在这里还没有提到的问题: 我的中间件列表中有 GZipMiddleware。

由于调试工具栏的自动配置将调试工具栏的中间件置于顶部,因此它只能“查看”压缩后的 HTML,无法将工具栏添加到其中。

我在开发设置中删除了 GZipMiddleware。手动设置调试工具栏的配置并放置中间件 之后 GZip 也可以工作。

10.0.2.2添加到 Windows 上的 INTERNAL _ IPS 中,它在内部与流浪汉一起使用

INTERNAL _ IPS = ( “10.0.2.2” )

这个应该可以。

我使用 Vagrant 也遇到了同样的问题,我通过将 ::ffff:192.168.33.1添加到 INTERNAL _ IPS 来解决这个问题,如下例所示。

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

请记住,abc0是我在 Vagrantfile 的私人网络的 IP 地址。

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

如果使用 PureCSS 和其他显然的 CSS 框架,1.4版本有一个隐藏的问题。

这个 是修复这个问题的提交。

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

对于任何使用 Pycharm5模板调试的人来说,它在某些版本中不能正常工作。固定在5.0.4,受影响的版本-5.0.1,5.0。2 看看 问题

花很多时间去找出答案,也许能帮到别人

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

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

这将替换默认方法,该方法决定是否应显示工具栏,并始终返回 true。

在我的例子中,我只需要删除 Python 编译的文件(*.pyc)

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',
# ...
]

多克

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

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

这也适用于其他动态路由情况,如流浪者或 Heroku。

这里有一些更多的细节为好奇。Django _ debug _ tool 中确定是否显示工具栏的代码检查 REMOTE_ADDR的值,如下所示:

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

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

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

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

是一个过时的浏览器害了我!

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

我知道这个问题有点老,但是今天我用 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

在 Django = 3.1中,经过多次尝试和错误,这对我很有用 在编写了所有 Internal _ ip、中间件(附加在 url 中)之后,将这段代码放在下面的 setings.py 中

def show_toolbar(request):
return True




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

他们中的许多人建议 SHOW _ TOOLBAR _ CALLback,但是在我的例子中,它只在添加了“ INSERT _ BEFORE”之后才起作用

对我有用。

#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

也有同样的问题 在加入

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>'
}

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

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

我用的是 GoogleChrome

FireFox错误被修复和 django 工具栏图标出现

如果你使用窗户,它可能来自你的注册表。 将 HKEY _ CLASSES _ ROOT. js Content Type 设置为 text/javascript 而不是 text/print。

运行以下命令:

python manage.py migrate

现在再次运行服务器

  1. 正如您所说,我已经配置了文档中说的所有内容,但是 debug _ toolbar 仍然没有显示出来。 然后我在 Firefox 中尝试了一下,它工作得很好。

  2. 然后从 chrome,我检查网页和改变 classname class = “ djdt-hide”。你可以尝试改变或删除它。

  3. 运行 manage.py Collectstatic 并重复上面的步骤

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

    .djdt-hidden{ display: none;}

    从路径

    Debug _ toolbar/static/debug _ toolbar/css/toolbar.css

  5. 将这两行添加到 setings.py 中的某个位置

    import mimetypes

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

  6. 在 urls.py

    import debug_toolbar

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

  7. 使用参考 < a href = “ https://django-debug-toolbar.readthedocs.io/en/update/installation.html”rel = “ nofollow norefrer”> django debug toolbar install

  1. 如果还是不起作用, 创建 launch.json 并为调试提供不同的端口号

` {

"version": "0.2.0",
"configurations": [
    

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

} `

  1. 重要步骤: 检查您的网页/模板的格式是否正确,以便显示 debug _ toolbar。使用 html 样板模板来编辑页面或添加缺少的元素/标记,如

    <html></html> <body></body> <head><head>

等到您的 django 模板或导入布局

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

Chrome 控制台: 加载模块脚本失败: 预期是一个 JavaScript 模块脚本,但是服务器响应了一个 MIME 类型的“文本/纯文本”。对于每个 HTML 规范的模块脚本,强制执行严格的 MIME 类型检查。(toolbar.js; 1)

在 EDGE 中,完全来自同一个服务器和 URL 的工具栏被显示出来。

我也有同样的问题,我尝试了上面所有的解决方案,但没有一个奏效。 然后我试图找出在我的项目中这个问题的主要问题是什么,它来自模板文件。 确保模板内容在 <body></body>中。

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>


</body>
</html>


我得到了下面的错误,但是我能够在视图页面源代码中看到与 debug_toolbar相关的组件。然后检查页面显示下面的错误。

加载模块脚本失败: 希望是 JavaScript 模块脚本,但 服务器响应的 MIME 类型为“文本/纯文本” 对于每个 HTML 规范的模块脚本,类型检查是强制的。

enter image description here

然后我在 settings.py中添加了这个,错误消失了,我可以看到工具栏。

if DEBUG:
import mimetypes
mimetypes.add_type("application/javascript", ".js", True)