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

AlexBrand
fuente
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.

Chris Pratt
fuente
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.

Timothyashaw
fuente
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
donturner
fuente
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.

Anoyz
fuente
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

Mark Chackerian
fuente
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

César
fuente
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.

Bas Koopmans
fuente
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 .

Farhan Hafeez
fuente
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.

AgDude
fuente
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.

metakermit
fuente
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

Beto
fuente
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.

RemcoGerlich
fuente
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)

dnaranjo
fuente
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',
# ...
]
Stryker
fuente
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', )

Anderson Santos
fuente
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.

usuario1552891
fuente
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.

TimStaley
fuente
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
Andre Manzano
fuente
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.

Adriano Silva
fuente
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.

Petko M
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

Wolendranh
fuente
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.

jozo
fuente
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.

ogurets
fuente
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

Esequiel Albornoz
fuente
-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 :(

igameland
fuente