django-debug-toolbar没有显示出来

时间:2012-05-09 14:05:43

标签: python django django-debug-toolbar

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

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

  1. pip install django-debug-toolbar
  2. 添加到中间件类:
  3. 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

28 个答案:

答案 0 :(得分:156)

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

如果仍然无效,请尝试将“127.0.0.1”添加到INTERNAL_IPS

<强>更新

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

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

def show_toolbar(request):
    return True
SHOW_TOOLBAR_CALLBACK = show_toolbar

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

有关显式配置,另请参阅官方安装文档here

编辑(2015年6月17日):

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

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

他们tests使用这本词典。

答案 1 :(得分:77)

调试工具栏需要在INTERNAL_IPS设置中设置request.META ['REMOTE_ADDR']中的IP地址。在你的一个观点中输入一个印刷声明,如:

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

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

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

答案 2 :(得分:44)

答案 3 :(得分:25)

当前稳定版本0.11.0要求显示工具栏以下内容:

设置文件:

  1. DEBUG = True
  2. INTERNAL_IPS包含您的浏览器IP地址,而不是服务器地址。如果在本地浏览,则应为INTERNAL_IPS = ('127.0.0.1',)。如果只是远程浏览specify your public address
  3. 要安装的debug_toolbar应用,即INSTALLED_APPS = (..., 'debug_toolbar',)
  4. 要添加的调试工具栏中间件类,即MIDDLEWARE_CLASSES = ('debug_toolbar.middleware.DebugToolbarMiddleware', ...)。它应该尽早放在列表中。
  5. 模板文件:

    1. 必须是text/html
    2. 类型
    3. 必须有结束</html>代码
    4. 静态文件:

      如果您要提供静态内容,请确保通过执行以下操作来收集css,js和html:

      ./manage.py collectstatic 
      


      关于即将推出的django-debug-toolbar

      版本的注意事项

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

      无论哪种方式,如果你想从github run:

      安装最新版本
      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
      

答案 4 :(得分:18)

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

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

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

答案 5 :(得分:14)

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

  1. DEBUG = True
  2. INTERNAL_IPS = ('127.0.0.1', '192.168.0.1',)
  3. DEBUG_TOOLBAR_CONFIG = {'INTERCEPT_REDIRECTS': False,}
  4. 中间件是MIDDLEWARE_CLASSES中的第一个元素:
  5. 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',
    )
    

    我希望它有所帮助

答案 6 :(得分:12)

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

INTERNAL_IPS =(     &#39; 10.0.2.2&#39 ;, )

这应该有用。

答案 7 :(得分:6)

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

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

答案 8 :(得分:4)

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

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

答案 9 :(得分:3)

我尝试了pydanny's 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

我刚刚在official django-debug-toolbar docs中添加了'debug_toolbar.apps.DebugToolbarConfig'而不是'debug_toolbar'来修改它,因为我正在使用Django 1.7。

答案 10 :(得分:2)

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

答案 11 :(得分:2)

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

答案 12 :(得分:2)

以前答案的补充:

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

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

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

nginx config:

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

apache config:

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文件夹移动到您设置的静态文件文件夹

答案 13 :(得分:1)

就我而言,这是另一个尚未提及的问题:我在我的中间件列表中有GZipMiddleware。

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

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

答案 14 :(得分:1)

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

答案 15 :(得分: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', )

答案 16 :(得分:0)

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

答案 17 :(得分:0)

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

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

记住192.168.33.10是Vagrantfile中我的专用网络中的IP。

答案 18 :(得分:0)

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

版本1.4存在一个问题,如果您使用PureCSS以及其他CSS框架,它将被隐藏。

This是修复它的提交。

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

答案 19 :(得分:0)

对于使用Pycharm 5的任何人 - 模板调试在某些版本中不起作用。固定于5.0.4,受影响的血管 - 5.0.1,5.0.2 查看issue

花了很多时间来找到它。也许会帮助别人

答案 20 :(得分:0)

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

答案 21 :(得分:0)

您必须确保模板中有结束标记。

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

答案 22 :(得分:0)

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

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

答案 23 :(得分:0)

给我的是一个过时的浏览器!

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

答案 24 :(得分: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'后才起作用

答案 25 :(得分:0)

对我有用。

#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

答案 26 :(得分: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

FireFox 中的错误已修复并出现 django 工具栏图标

答案 27 :(得分:-1)

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