django-debug-toolbar non appare


132

Ho esaminato altre domande e non riesco a capirlo ...

Ho fatto quanto segue per installare django-debug-toolbar:

  1. pip installa django-debug-toolbar
  2. aggiunto alle classi 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 aggiunti:

INTERNAL_IPS = ('174.121.34.187',)

4 Aggiunto debug_toolbar alle app installate

Non visualizzo alcun errore o altro e la barra degli strumenti non viene visualizzata in nessuna pagina, nemmeno nell'amministratore.

Ho anche aggiunto la directory dei template debug_toolbar alla mia TEMPLATE_DIRS


9
Se stai usando Vagrant, assicurati che INTERNAL_IPSsia corretto. Un modo per verificare è in una vista, stampa il tuo request.META['REMOTE_ADDR'], quindi aggiungilo al tuo INTERNAL_IPS.
Sarà il

1
Questo potrebbe aiutare qualcuno. Stavo provando aggiungendo '*'gli IP interni, ma non funziona. Devi inserire IP specifici.
Luv33preet

Nel mio settings.py, ora è solo MIDDLEWARE, non MIDDLEWARE_CLASSES
bertie

Risposte:


174

Domanda stupida, ma non l'hai menzionata, quindi ... A cosa serve DEBUG? Non si carica se non lo èTrue .

Se il problema persiste, prova ad aggiungere anche '127.0.0.1' INTERNAL_IPS.

AGGIORNARE

Questa è una mossa ultimo disperato sforzo, non si dovrebbe avere per fare questo, ma sarà chiaramente mostrare se c'è solo qualche problema di configurazione o se c'è qualche problema più grande.

Aggiungi quanto segue a settings.py:

def show_toolbar(request):
    return True
SHOW_TOOLBAR_CALLBACK = show_toolbar

Ciò rimuoverà efficacemente tutti i controlli dalla barra degli strumenti di debug per determinare se dovrebbe o meno caricarsi; caricherà sempre. Lascialo solo a scopo di test, se ti dimentichi e lo avvii, tutti i tuoi visitatori potranno vedere anche la barra degli strumenti di debug.

Per una configurazione esplicita, consultare anche i documenti di installazione ufficiali qui .

EDIT (2015/06/17):

Apparentemente la sintassi per l'opzione nucleare è cambiata. Ora è nel suo dizionario:

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

I loro test usano questo dizionario.


3
Sì, quindi c'è un grosso problema in corso qui. Se stai usando qualcosa di diverso da runserverassicurati di riavviarlo. Diamine, riavvia runserveranche. Assicurati che le tue modifiche a settings.py siano state effettivamente salvate / confermate. Potresti provare a rimuovere i file * .pyc. In * nix, puoi farlo semplicemente con find . -name "*.pyc" -exec rm {} \;dalla radice del progetto. Infine, esegui python manage.py shelled esegui from django.conf import settingse controlla il valore di settings.INSTALLED_APPs.
Chris Pratt,

3
Non sono sicuro di cosa intendi con l'ultima domanda, ma se ti riferisci INTERNAL_IPS, quelli sono per il client non per il server (Django). In altre parole, inserisci il tuo indirizzo IP in modo da poter vedere la barra degli strumenti di debug, indipendentemente dall'IP su cui il sito potrebbe essere in esecuzione.
Chris Pratt,

10
INTERNAL_IPS mi ha anche preso .. Grazie per l'informazione
Lee

12
o ancheSHOW_TOOLBAR_CALLBACK = lambda x: True
John Mee il

6
@schillingt sì, mi scuso che avrei dovuto controllare questo. Penso che dovessi correre collectstaticper far apparire tutto.
Rob Grant,

80

La barra degli strumenti di debug desidera che l'indirizzo IP sia richiesto.META ['REMOTE_ADDR'] deve essere impostato nelle impostazioni INTERNAL_IPS. Inserisci un'istruzione stampata in una delle tue visualizzazioni in questo modo:

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

E poi carica quella pagina. Assicurati che IP sia nell'impostazione INTERNAL_IPS in settings.py.

Normalmente penso che saresti in grado di determinare facilmente l'indirizzo guardando l'indirizzo IP del tuo computer, ma nel mio caso sto eseguendo il server in una Virtual Box con il port forwarding ... e chissà cosa è successo. Pur non vedendolo da nessuna parte in ifconfig sul VB o sul mio sistema operativo, l'IP che è apparso nella chiave REMOTE_ADDR è stato il trucco dell'attivazione della barra degli strumenti.


2
Stavo arrivando alla mia pagina tramite il proxy nginx pass through, quindi remote_addr era il mio proxy e non il mio vero IP. Avevo bisogno di aggiungere il mio indirizzo IP proxy INTERNAL_IPSe ha iniziato a funzionare.
Kurt

1
Dalla mia macchina ospite in VirtualBox, la mia macchina host è vista come 10.0.0.2, se può aiutare qualcuno. :)
mrmuggles il

MOLTO utile per CONTROLLARE IP se usi qualche virtualizzazione come VAGRANT
andilabs

3
Nella finestra mobile il mio REMOTE_ADDR non era quello che avrei immaginato.
Aaron McMillin il


28

L'attuale versione stabile 0.11.0 richiede che le seguenti cose siano vere per mostrare la barra degli strumenti:

File delle impostazioni:

  1. DEBUG = True
  2. INTERNAL_IPSper includere l'indirizzo IP del browser, anziché l'indirizzo del server. Se la navigazione locale dovrebbe essere INTERNAL_IPS = ('127.0.0.1',). Se navighi in remoto, specifica semplicemente il tuo indirizzo pubblico .
  3. L'app debug_toolbar da installare, ad es INSTALLED_APPS = (..., 'debug_toolbar',)
  4. La classe middleware della barra degli strumenti di debug da aggiungere, ad es MIDDLEWARE_CLASSES = ('debug_toolbar.middleware.DebugToolbarMiddleware', ...). Dovrebbe essere inserito il prima possibile nell'elenco.

File modello:

  1. Deve essere di tipo text/html
  2. Deve avere un </html>tag di chiusura

File statici:

Se stai offrendo contenuti statici, assicurati di raccogliere i css, js e html facendo:

./manage.py collectstatic 


Nota sulle prossime versioni di django-debug-toolbar

Le versioni di sviluppo più recenti hanno aggiunto le impostazioni predefinite per i punti di impostazione 2, 3 e 4, il che rende la vita un po 'più semplice, come in ogni versione di sviluppo che presenta dei bug. Ho scoperto che l'ultima versione di Git ha portato a unImproperlyConfigured errore durante l'esecuzione di nginx / uwsgi.

In entrambi i casi, se si desidera installare l'ultima versione dall'esecuzione di github:

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

Puoi anche clonare un commit specifico eseguendo:

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

2
in realtà è il tag <body> </body> che non è necessario </html>
Zgr3doo

20

Ho provato di tutto, dall'impostazione DEBUG = True, alle impostazioni INTERNAL_IPSall'indirizzo IP del mio client, e persino alla configurazione manuale di Django Debug Toolbar (nota che le versioni recenti eseguono automaticamente tutte le configurazioni, come l'aggiunta del middleware e degli URL). Niente ha funzionato in un server di sviluppo remoto (sebbene funzionasse localmente). L'unica cosa che ha funzionato è stata la configurazione della barra degli strumenti come segue:

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

Ciò sostituisce il metodo predefinito che decide se visualizzare la barra degli strumenti e restituisce sempre true.


16

docker

Se stai sviluppando con un server Django in un contenitore Docker con docker, le istruzioni per abilitare la barra degli strumenti non funzionano. Il motivo è legato al fatto che l'indirizzo effettivo che dovresti aggiungere INTERNAL_IPSsarà qualcosa di dinamico, come 172.24.0.1. Invece di provare a impostare dinamicamente il valore di INTERNAL_IPS, la soluzione semplice è quella di sostituire la funzione che abilita la barra degli strumenti settings.py, ad esempio:

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


Questo dovrebbe funzionare anche per altre situazioni di routing dinamico, come il vagabondo.


Ecco alcuni dettagli in più per i curiosi. Il codice in django_debug_tool che determina se mostrare la barra degli strumenti esamina il valore in REMOTE_ADDRquesto modo:

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

quindi se in realtà non si conosce il valore REMOTE_ADDRdovuto al routing della finestra mobile dinamica, la barra degli strumenti non funzionerà. Ad esempio, è possibile utilizzare il comando di rete docker per visualizzare i valori IP dinamicidocker network inspect my_docker_network_name


15

La barra degli strumenti funziona perfettamente. Con queste configurazioni:

  1. DEBUG = True
  2. INTERNAL_IPS = ('127.0.0.1', '192.168.0.1',)
  3. DEBUG_TOOLBAR_CONFIG = {'INTERCEPT_REDIRECTS': False,}
  4. Il middleware è il primo elemento in 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',
)

spero possa essere d'aiuto


2
Probabilmente dovresti redarre il tuo indirizzo IP dalla tua risposta. Dal momento che la maggior parte delle persone gestisce la banda larga in questi giorni e la maggior parte delle connessioni a banda larga raramente cambia indirizzo IP, se mai. Probabilmente non vorrai che rimanga in giro sulle interwebs.
Chris Pratt,

192.168. *. * È un indirizzo IP locale interno assegnato al computer dal router. L'indirizzo IP esterno è diverso.
Robeezy,

@rpod è esattamente per questo che qualcuno l'ha modificato.
Yuji 'Tomita' Tomita,

Se si utilizza il File unico vero Config, e vogliono solo Debug Toolbar in dev, invece di aggiungere agli middleware_classes in base.pysi potrebbe desiderare di aggiungere questo alla tua local.py: MIDDLEWARE_CLASSES = ('debug_toolbar.middleware.DebugToolbarMiddleware',) + MIDDLEWARE_CLASSES.
Rob Grant,

12

Aggiungi 10.0.2.2a INTERNAL_IPS su Windows, viene utilizzato internamente con Vagrant

INTERNAL_IPS = ('10 .0.2.2 ',)

Questo dovrebbe funzionare.


1
Confermato questo risolto il mio problema usando Vagrant su OSX.
Josh

Questa è la soluzione più corretta e più probabile e la più semplice :)
Lavoro

6

Ho avuto lo stesso problema e finalmente risolto dopo aver cercato su Google.

In INTERNAL_IPS, devi avere l' indirizzo IP del client .


4

Un'altra cosa che può far sì che la barra degli strumenti rimanga nascosta è se non riesce a trovare i file statici richiesti. I modelli debug_toolbar utilizzano il tag modello {{STATIC_URL}}, quindi assicurati che nei file statici sia presente una cartella denominata barra degli strumenti di debug.

Il comando di gestione collectstatic dovrebbe occuparsene nella maggior parte delle installazioni.


3

Ho provato la configurazione dal cookiecutter-django di Pydanny e ha funzionato per me:

# 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

L'ho appena modificato aggiungendo 'debug_toolbar.apps.DebugToolbarConfig'invece 'debug_toolbar'come indicato nei documenti ufficiali di django-debug-toolbar , mentre sto usando Django 1.7.


2

Un'aggiunta alle risposte precedenti:

se la barra degli strumenti non viene visualizzata, ma viene caricata nell'html (controlla l'html del tuo sito in un browser, scorri verso il basso)

il problema potrebbe essere che i file statici della barra degli strumenti di debug non sono stati trovati (puoi anche vederlo nei log di accesso del tuo sito, ad esempio 404 errori per /static/debug_toolbar/js/toolbar.js)

Quindi può essere risolto nel modo seguente (esempi per nginx e apache):

configurazione nginx:

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

config apache:

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

O:

manage.py collectstatic

ulteriori informazioni su collectstatic qui: https://docs.djangoproject.com/en/dev/ref/contrib/staticfiles/#collectstatic

Oppure sposta manualmente la cartella debug_toolbar dei file statici debug_toolbar nella cartella dei file statici impostata


2

Nel mio caso, era un altro problema che non è stato ancora menzionato qui: avevo GZipMiddleware nella mia lista di programmi.

Poiché la configurazione automatica della barra degli strumenti di debug mette in primo piano il middleware della barra degli strumenti di debug, ottiene solo il "vedi" HTML compresso, a cui non può aggiungere la barra degli strumenti.

Ho rimosso GZipMiddleware nelle mie impostazioni di sviluppo. L'impostazione manuale della configurazione della barra degli strumenti di debug e il posizionamento del middleware dopo GZip dovrebbero funzionare.


Anche abilitando GZip a livello di vista con gzip_pagela barra degli strumenti scompare. docs.djangoproject.com/en/2.0/topics/http/decorators/…
Brachamul

2

Nel mio caso, dovevo solo rimuovere i file compilati di Python ( *.pyc)


Grazie per questo commento, questa mattina mi ha risparmiato un esaurimento mentale. Se tutto il resto sembra giusto - e questo progetto ha funzionato bene per me - prova questo e vedi se lo risolve. Il DDT HTML / JS era sulla pagina, tutto sembrava a posto, ma in realtà non si sarebbe mostrato. Ho cancellato i file pyc e ha ricominciato a comparire
Shane

2

Django 1.8.5:

Ho dovuto aggiungere quanto segue al file url.py del progetto per ottenere la visualizzazione della barra degli strumenti di debug. Dopo che viene visualizzata la barra degli strumenti di debug.

 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: e successivi:

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

Inoltre, non dimenticare di includere debug_toolbar nel tuo middleware. La barra degli strumenti di debug è implementata principalmente in un middleware. Abilitalo nel tuo modulo impostazioni come segue: (django versioni più recenti)


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

Middleware vecchio stile: (è necessario disporre della tastiera _CLASSES nel middleware)

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

1

Questo non è stato il caso di questo specifico autore, ma ho appena avuto problemi con la barra degli strumenti di debug non mostrata e dopo aver fatto tutto ciò che hanno sottolineato, ho scoperto che era un problema con l'ordine MIDDLEWARE. Quindi mettere il middleware all'inizio dell'elenco potrebbe funzionare. Il mio è il primo:

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

devi assicurarti che ci sia un tag di chiusura nei tuoi modelli.

Il mio problema è che non ci sono tag html regolari nei miei modelli, visualizzo solo il contenuto in testo semplice. L'ho risolto ereditando ogni file html da base.html, che ha un tag.


0

Per me questo è stato semplice come digitare 127.0.0.1:8000nella barra degli indirizzi, piuttosto localhost:8000che apparentemente non corrispondeva a INTERNAL_IPS.


0

Ho avuto lo stesso problema, l'ho risolto guardando il registro degli errori di Apache. Ho l'apache in esecuzione su mac os x con mod_wsgi La cartella tamplete della debug_toolbar non veniva caricata

Esempio di 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"

Aggiungo solo questa riga al mio file VirtualHost:

Alias /static/debug_toolbar /Library/Python/2.7/site-packages/debug_toolbar/static/debug_toolbar
  • Ovviamente devi cambiare il tuo percorso Python

0

Ho avuto lo stesso problema con Vagrant. Ho risolto questo problema aggiungendo ::ffff:192.168.33.1a INTERNAL_IPS come nell'esempio seguente.

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

Ricordando che 192.168.33.10è l'IP nella mia rete privata in Vagrantfile.


0

Ho avuto questo problema e ho dovuto installare la barra degli strumenti di debug dalla fonte.

La versione 1.4 ha un problema in cui è nascosta se si utilizza PureCSS e apparentemente altri framework CSS.

Questo è il commit che lo risolve.

I documenti spiegano come installare dal sorgente.


0

Per chiunque utilizzi Pycharm 5, il debug dei template non funziona in alcune versioni. Risolto in 5.0.4, vesioni interessate - 5.0.1, 5.0.2 Verifica problema

Trascorrere MOLTO tempo per scoprirlo. Forse aiuterà qualcuno


0

Nel codice su cui stavo lavorando, sono state fatte più piccole richieste durante la gestione della richiesta principale (è un caso d'uso molto specifico). Erano richieste gestite dallo stesso thread di Django. La barra degli strumenti di debug di Django (DjDT) non prevede questo comportamento e include le barre degli strumenti di DjDT alla prima risposta, quindi rimuove il suo stato per il thread. Pertanto, quando la richiesta principale è stata rispedita al browser, DjDT non è stato incluso nella risposta.

Lezioni apprese: DjDT salva lo stato per thread. Rimuove lo stato per un thread dopo la prima risposta.


0

Quello che mi ha fatto è un browser obsoleto!

Ho notato che carica alcuni fogli di stile dalla barra degli strumenti di debug e ho indovinato che potrebbe essere un problema di front-end.


0

So che questa domanda è un po 'vecchia, ma oggi ho installato django-toolbar con docker e ho riscontrato lo stesso problema, questo mi ha risolto

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]

Come ho letto in un commento, il problema è che la finestra mobile utilizza un IP dinamico, per risolvere questo possiamo ottenere l'ip dal codice sopra


-1

Una cosa stupida mi ha fatto .. che se usi apache wsgi, ricordati di toccare il file .wsgi per forzare la ricompilazione del codice. spreco solo 20 minuti del mio tempo per eseguire il debug dello stupido errore :(

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.