django-debug-toolbar no aparece


132

Miré otras preguntas y no puedo resolverlo ...

Hice lo siguiente para instalar django-debug-toolbar:

  1. pip install django-debug-toolbar
  2. agregado a las clases de middleware:
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 agregados:

INTERNAL_IPS = ('174.121.34.187',)

4 Se agregó debug_toolbar a las aplicaciones instaladas

No recibo ningún error ni nada, y la barra de herramientas no aparece en ninguna página, ni siquiera en el administrador.

Incluso agregué el directorio de las plantillas debug_toolbar a mi TEMPLATE_DIRS


9
Si está utilizando Vagrant, asegúrese de que INTERNAL_IPSsea ​​correcto. Una forma de verificar es en una vista, imprima su request.META['REMOTE_ADDR'], luego agregue eso a su INTERNAL_IPS.
Will

1
Esto podría ayudar a alguien. Estaba intentando agregar '*'las IP internas, pero eso no funciona. Tienes que ingresar direcciones IP específicas.
Luv33preet

En mi settings.py, ahora es solo MIDDLEWARE, no MIDDLEWARE_CLASSES
bertie

Respuestas:


174

Pregunta estúpida, pero no lo mencionaste, así que ... ¿Qué está DEBUGconfigurado? No se cargará a menos que seaTrue .

Si todavía no funciona, intente agregar '127.0.0.1' INTERNAL_IPStambién.

ACTUALIZAR

Este es un movimiento de último esfuerzo, no debería tener que hacer esto, pero mostrará claramente si hay simplemente algún problema de configuración o si hay algún problema mayor.

Agregue lo siguiente a settings.py:

def show_toolbar(request):
    return True
SHOW_TOOLBAR_CALLBACK = show_toolbar

Eso eliminará efectivamente todas las comprobaciones mediante la barra de herramientas de depuración para determinar si debe o no cargarse; siempre solo se cargará. Solo déjelo para fines de prueba, si lo olvida y se inicia con él, todos sus visitantes también podrán ver su barra de herramientas de depuración.

Para una configuración explícita, también vea los documentos oficiales de instalación aquí .

EDITAR (17/06/2015):

Aparentemente, la sintaxis de la opción nuclear ha cambiado. Ahora está en su propio diccionario:

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

Sus pruebas usan este diccionario.


3
Sí, así que hay un problema mayor aquí. Si está utilizando algo distinto a runserverasegurarse de reiniciarlo. Diablos, reiniciar runservertambién. Asegúrese de que sus cambios en settings.py realmente se hayan guardado / confirmado. Es posible que desee intentar eliminar archivos * .pyc. En * nix, puede hacerlo simplemente find . -name "*.pyc" -exec rm {} \;desde la raíz del proyecto. Finalmente, ejecuta python manage.py shelly ejecuta from django.conf import settingsy verifica el valor de settings.INSTALLED_APPs.
Chris Pratt

3
No estoy seguro de lo que quieres decir con la última pregunta, pero si te refieres a ellos INTERNAL_IPS, son para el cliente, no para el servidor (Django). En otras palabras, ingresa su dirección IP para que pueda ver la barra de herramientas de depuración, sin importar en qué IP se esté ejecutando el sitio.
Chris Pratt

10
INTERNAL_IPS también me atrapó ... Gracias por la información
Lee

12
o inclusoSHOW_TOOLBAR_CALLBACK = lambda x: True
John Mee

66
@schillingt sí, disculpas, debería haber comprobado esto. Creo que tuve que correr collectstaticpara que todo apareciera.
Rob Grant

80

La barra de herramientas de depuración desea que la dirección IP en request.META ['REMOTE_ADDR'] se configure en la configuración INTERNAL_IPS. Agregue una declaración impresa en una de sus vistas de la siguiente manera:

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

Y luego carga esa página. Asegúrese de que IP esté en su configuración INTERNAL_IPS en settings.py.

Normalmente, pensaría que sería capaz de determinar la dirección fácilmente mirando la dirección IP de su computadora, pero en mi caso estoy ejecutando el servidor en una Virtual Box con reenvío de puertos ... y quién sabe qué pasó. A pesar de no verlo en ninguna parte de ifconfig en el VB o en mi propio sistema operativo, la IP que apareció en la clave REMOTE_ADDR fue lo que hizo el truco de activar la barra de herramientas.


2
Estaba llegando a mi página a través del proxy nginx, así que remote_addr era mi proxy y no mi ip real. Necesitaba agregar mi dirección IP de proxy INTERNAL_IPSy comenzó a funcionar.
Kurt

1
Desde mi máquina invitada en VirtualBox, mi máquina host se ve como 10.0.0.2, si puede ayudar a alguien. :)
mrmuggles

MUY útil para VERIFICAR IP si usa alguna virtualización como VAGRANT
andilabs

3
En Docker, mi REMOTE_ADDR no era lo que habría asumido.
Aaron McMillin


28

La versión estable actual 0.11.0 requiere que las siguientes cosas sean ciertas para que se muestre la barra de herramientas:

Archivo de configuración:

  1. DEBUG = True
  2. INTERNAL_IPSpara incluir la dirección IP de su navegador, en lugar de la dirección del servidor. Si navega localmente, esto debería ser INTERNAL_IPS = ('127.0.0.1',). Si navega de forma remota, solo especifique su dirección pública .
  3. La aplicación debug_toolbar que se instalará, es decir INSTALLED_APPS = (..., 'debug_toolbar',)
  4. Se agregará la clase de middleware de la barra de herramientas de depuración, es decir MIDDLEWARE_CLASSES = ('debug_toolbar.middleware.DebugToolbarMiddleware', ...). Debe colocarse lo antes posible en la lista.

Archivos de plantilla:

  1. Debe ser de tipo text/html
  2. Debe tener una </html>etiqueta de cierre

Archivos estáticos:

Si está sirviendo contenido estático, asegúrese de recopilar css, js y html haciendo lo siguiente:

./manage.py collectstatic 


Nota sobre las próximas versiones de django-debug-toolbar

Las versiones de desarrollo más recientes han agregado valores predeterminados para los puntos de configuración 2, 3 y 4, lo que simplifica un poco la vida, sin embargo, como con cualquier versión de desarrollo, tiene errores. Descubrí que la última versión de git provocó un ImproperlyConfigurederror al ejecutar nginx / uwsgi.

De cualquier manera, si desea instalar la última versión de github run:

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

También puede clonar una confirmación específica haciendo:

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

2
en realidad su etiqueta <body> </body> que es necesario no </html>
Zgr3doo

20

Intenté todo, desde la configuración DEBUG = Truehasta la configuración INTERNAL_IPSde la dirección IP de mi cliente e incluso configurando la barra de herramientas de depuración de Django manualmente (tenga en cuenta que las versiones recientes hacen todas las configuraciones automáticamente, como agregar el middleware y las URL). Nada funcionaba en un servidor de desarrollo remoto (aunque sí funcionaba localmente). Lo ÚNICO que funcionó fue configurar la barra de herramientas de la siguiente manera:

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

Esto reemplaza el método predeterminado que decide si se debe mostrar la barra de herramientas, y siempre devuelve verdadero.


16

Estibador

Si está desarrollando con un servidor Django en un contenedor Docker con docker, las instrucciones para habilitar la barra de herramientas no funcionan. La razón está relacionada con el hecho de que la dirección real a la que tendría que agregar INTERNAL_IPSserá algo dinámico, como 172.24.0.1. En lugar de intentar establecer dinámicamente el valor de INTERNAL_IPS, la solución directa es reemplazar la función que habilita la barra de herramientas, en su settings.py, por ejemplo:

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


Esto también debería funcionar para otras situaciones de enrutamiento dinámico, como vagabundo.


Aquí hay algunos detalles más para los curiosos. El código en django_debug_tool que determina si se muestra la barra de herramientas examina el valor de REMOTE_ADDResta manera:

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

así que si realmente no conoce el valor REMOTE_ADDRdebido a su enrutamiento dinámico de docker, la barra de herramientas no funcionará. Puede usar el comando docker network para ver los valores dinámicos de IP, por ejemplodocker network inspect my_docker_network_name


15

Tengo la barra de herramientas funcionando perfectamente. Con estas configuraciones:

  1. DEBUG = True
  2. INTERNAL_IPS = ('127.0.0.1', '192.168.0.1',)
  3. DEBUG_TOOLBAR_CONFIG = {'INTERCEPT_REDIRECTS': False,}
  4. El middleware es el primer elemento en 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',
)

Espero que ayude


2
Probablemente debería redactar su dirección IP de su respuesta. Dado que la mayoría de las personas están ejecutando banda ancha en estos días y la mayoría de las conexiones de banda ancha rara vez cambian la dirección IP o nunca. Probablemente no quieras que andes por las redes.
Chris Pratt

192.168. *. * Es una dirección IP local interna asignada a la computadora por el enrutador. La dirección IP externa es diferente.
Robeezy

@rpod eso es exactamente por qué alguien lo editó a eso.
Yuji 'Tomita' Tomita

Si está utilizando el archivo Una verdadera configuración, y sólo desea barra de depuración en dev, en lugar de añadir a los MIDDLEWARE_CLASSES en base.pyEs posible que desee agregar esto a su local.py: MIDDLEWARE_CLASSES = ('debug_toolbar.middleware.DebugToolbarMiddleware',) + MIDDLEWARE_CLASSES.
Rob Grant

12

Agregue 10.0.2.2a su INTERNAL_IPS en Windows, se usa con vagabundo internamente

INTERNAL_IPS = ('10 .0.2.2 ',)

Esto debería funcionar.


1
Confirmé que esto solucionó mi problema al usar Vagrant en OSX.
Josh

Esta es la solución más correcta y más probable y la más simple :) Se confirmó que funcionaba con vagabundo en Windows 7
mislavcimpersak

6

Tuve el mismo problema y finalmente lo resolví después de buscar en Google.

En INTERNAL_IPS, debe tener la dirección IP del cliente .


4

Otra cosa que puede hacer que la barra de herramientas permanezca oculta es si no puede encontrar los archivos estáticos necesarios. Las plantillas de debug_toolbar usan la etiqueta de plantilla {{STATIC_URL}}, así que asegúrese de que haya una carpeta en sus archivos estáticos llamada barra de herramientas de depuración.

El comando de gestión colectiva debería ocuparse de esto en la mayoría de las instalaciones.


3

Probé la configuración de cookiecutter-django de pydanny y funcionó para mí:

# 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

Simplemente lo modifiqué agregando en 'debug_toolbar.apps.DebugToolbarConfig'lugar de 'debug_toolbar'lo mencionado en los documentos oficiales de django-debug-toolbar , ya que estoy usando Django 1.7.


2

Una adición a las respuestas anteriores:

si la barra de herramientas no aparece, pero se carga en el html (revise el html de su sitio en un navegador, desplácese hacia abajo)

el problema puede ser que no se encuentran los archivos estáticos de la barra de herramientas de depuración (también puede ver esto en los registros de acceso de su sitio, por ejemplo, errores 404 para /static/debug_toolbar/js/toolbar.js)

Se puede arreglar de la siguiente manera (ejemplos para nginx y apache):

nginx config:

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

configuración de apache:

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

O:

manage.py collectstatic

Más información sobre collectstatic aquí: https://docs.djangoproject.com/en/dev/ref/contrib/staticfiles/#collectstatic

O mueva manualmente la carpeta debug_toolbar de los archivos estáticos debug_toolbar a su carpeta de archivos estáticos configurados


2

En mi caso, era otro problema que aún no se ha mencionado aquí: tenía GZipMiddleware en mi lista de middlewares.

Como la configuración automática de la barra de herramientas de depuración coloca el middleware de la barra de herramientas de depuración en la parte superior, solo obtiene el "ver" el HTML comprimido, al que no puede agregar la barra de herramientas.

Eliminé GZipMiddleware en mi configuración de desarrollo. Configurar la configuración de la barra de herramientas de depuración manualmente y colocar el middleware después de GZip también debería funcionar.


Incluso habilitar GZip en el nivel de vista gzip_pagehace que la barra de herramientas desaparezca. docs.djangoproject.com/en/2.0/topics/http/decorators/…
Brachamul

2

En mi caso, solo necesitaba eliminar los archivos compilados de Python ( *.pyc)


Gracias por este comentario, me salvó un colapso mental esta mañana. Si todo lo demás parece correcto, y este proyecto había estado funcionando bien antes para mí, intente esto y vea si lo resuelve. El DDT HTML / JS estaba en la página, todo se veía bien, pero aún no se mostraba. Borré los archivos pyc y comenzó a aparecer nuevamente
Shane

2

django 1.8.5:

Tuve que agregar lo siguiente al proyecto url.py para obtener la visualización de la barra de herramientas de depuración. Después de eso se muestra la barra de herramientas de depuración.

 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: y superior:

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

Además, no olvide incluir debug_toolbar en su middleware. La barra de herramientas de depuración se implementa principalmente en un middleware. Habilítelo en su módulo de configuración de la siguiente manera: (versiones más recientes de django)


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

Middleware de estilo antiguo: (necesita tener el trabajo clave _CLASSES en el Middleware)

MIDDLEWARE_CLASSES = [
# ...
'debug_toolbar.middleware.DebugToolbarMiddleware',
# ...
]

1

Este no fue el caso de este autor específico, pero solo he estado luchando con la barra de herramientas de depuración que no se muestra y después de hacer todo lo que señalaron, descubrí que era un problema con el pedido de MIDDLEWARE. Así que poner el middleware al principio de la lista podría funcionar. El mío es primero:

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


0

debe asegurarse de que haya una etiqueta de cierre en sus plantillas.

Mi problema es que no hay etiquetas html regulares en mis plantillas, solo visualizo contenido en texto plano. Lo resolví heredando cada archivo html de base.html, que tiene una etiqueta.


0

Para mí, esto fue tan simple como escribir 127.0.0.1:8000en la barra de direcciones, en lugar de lo localhost:8000que aparentemente no coincidía con INTERNAL_IPS.


0

Tengo el mismo problema, lo resolví mirando el registro de errores de Apache. Obtuve el apache ejecutándose en mac os x con mod_wsgi La carpeta de tamplete de debug_toolbar no se estaba cargando

Muestra de registro:

==> /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"

Solo agrego esta línea a mi archivo VirtualHost:

Alias /static/debug_toolbar /Library/Python/2.7/site-packages/debug_toolbar/static/debug_toolbar
  • Por supuesto, debes cambiar tu ruta de Python

0

Tuve el mismo problema usando Vagrant. Resolví este problema agregando ::ffff:192.168.33.1a INTERNAL_IPS como el siguiente ejemplo.

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

Recordando que 192.168.33.10es la IP en mi red privada en Vagrantfile.


0

Tuve este problema y tuve que instalar la barra de herramientas de depuración desde el origen.

La versión 1.4 tiene un problema donde está oculto si usa PureCSS y aparentemente otros marcos CSS.

Este es el commit que corrige eso.

Los documentos explican cómo instalar desde la fuente.


0

Para cualquiera que esté usando Pycharm 5, la depuración de plantillas no funciona en algunas versiones. Vesions fijo en 5.0.4, 5.0.1 - afectadas, 5.0.2 Salida tema

Pase MUCHO tiempo para descubrirlo. Quizás ayude a alguien


0

En el código en el que estaba trabajando, se realizaron varias solicitudes pequeñas durante el manejo de la solicitud principal (es un caso de uso muy específico). Eran solicitudes manejadas por el mismo hilo de Django. La barra de herramientas de depuración de Django (DjDT) no espera este comportamiento e incluye las barras de herramientas de DjDT a la primera respuesta y luego elimina su estado para el hilo. Entonces, cuando la solicitud principal se devolvió al navegador, DjDT no se incluyó en la respuesta.

Lecciones aprendidas: DjDT guarda su estado por hilo. Elimina el estado de un hilo después de la primera respuesta.


0

¡Lo que me consiguió es un navegador desactualizado!

Noté que carga algunas hojas de estilo de la barra de herramientas de depuración y supuse que podría ser un problema de front-end.


0

Sé que esta pregunta es un poco antigua, pero hoy instalé django-toolbar con docker y encontré el mismo problema, esto me lo resolvió

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]

Como leí en un comentario, el problema es que Docker usa una IP dinámica, para resolver esto podemos obtener la IP del código anterior


-1

Una cosa estúpida me atrapó ... que si usas apache wsgi, recuerda tocar el archivo .wsgi para forzar la recompilación de tu código. solo pierdo 20 minutos de mi tiempo para depurar el estúpido error :(

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.