160 votes

django-debug-toolbar ne s'affiche pas

J'ai regardé les autres questions et je n'arrive pas à comprendre...

J'ai fait ce qui suit pour installer django-debug-toolbar :

  1. pip install django-debug-toolbar
  2. ajoutés aux classes d'intergiciels :
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 Ajouté INTERNAL_IPS :

INTERNAL_IPS = ('174.121.34.187',)

4 Ajout de debug_toolbar aux applications installées

Je n'obtiens aucune erreur ni rien d'autre, et la barre d'outils ne s'affiche sur aucune page, pas même celle de l'administration.

J'ai même ajouté le répertoire des modèles de la barre d'outils de débogage à ma page d'accueil. TEMPLATE_DIRS

16 votes

Si vous utilisez Vagrant, assurez vous que votre INTERNAL_IPS est correcte. Une façon de vérifier est d'imprimer dans une vue, votre request.META['REMOTE_ADDR'] puis ajoutez-la à votre INTERNAL_IPS .

2 votes

Cela pourrait aider quelqu'un. J'ai essayé en ajoutant '*' dans les IP internes, mais cela ne fonctionne pas. Vous devez entrer des IP spécifiques.

0 votes

Dans mon fichier settings.py, c'est maintenant MIDDLEWARE seulement, et non MIDDLEWARE_CLASSES.

208voto

Chris Pratt Points 53859

Question stupide, mais vous ne l'avez pas mentionné, alors... Qu'est-ce que DEBUG est réglé sur ? Il ne sera pas chargé à moins que ce soit True .

Si cela ne fonctionne toujours pas, essayez d'ajouter '127.0.0.1' à l'adresse suivante INTERNAL_IPS également.

UPDATE

C'est un coup de la dernière chance, tu ne devrais pas ont pour le faire, mais cela montrera clairement s'il s'agit simplement d'un problème de configuration ou d'un problème plus important.

Ajoutez ce qui suit à settings.py :

def show_toolbar(request):
    return True
SHOW_TOOLBAR_CALLBACK = show_toolbar

Cela supprimera effectivement toutes les vérifications effectuées par la barre d'outils de débogage pour déterminer si elle doit ou non se charger elle-même ; elle se chargera toujours simplement. Ne laissez cette option qu'à des fins de test. Si vous oubliez et lancez votre site avec cette option, tous vos visiteurs verront également votre barre d'outils de débogage.

Pour une configuration explicite, voir également les documents officiels d'installation. ici .

EDIT(6/17/2015) :

Apparemment, la syntaxe de l'option nucléaire a changé. Elle est maintenant dans son propre dictionnaire :

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

Leur tests utiliser ce dictionnaire.

3 votes

Ouais, donc il y a un problème plus important qui se passe ici. Si vous utilisez quelque chose d'autre que runserver assurez-vous de le redémarrer. Heck, redémarre runserver aussi. Assurez-vous que vos changements dans settings.py en fait a été sauvegardé/commandé. Vous pouvez essayer de supprimer les fichiers *.pyc. Dans *nix, vous pouvez le faire simplement avec find . -name "*.pyc" -exec rm {} \; du projet Root. Enfin, exécutez python manage.py shell et exécute from django.conf import settings et vérifier la valeur de settings.INSTALLED_APPs .

0 votes

Les paramètres sont définitivement appliqués.. J'ai commenté mes répertoires de modèles et il ne pouvait pas trouver les modèles pour moi... Je ne sais vraiment pas ce qui se passe... Pensez-vous que le fait que lorsque vous naviguez vers l'adresse IP, vous n'obtenez pas le site pourrait avoir quelque chose à voir avec cela ?

4 votes

Je ne suis pas sûr de ce que vous voulez dire avec la dernière question, mais si vous faites référence à INTERNAL_IPS ces éléments sont destinés au client et non au serveur (Django). En d'autres termes, vous mettez dans votre Adresse IP donc vous peut voir la barre d'outils de débogage, quelle que soit l'IP sur laquelle le site fonctionne.

94voto

timothyashaw Points 421

La barre d'outils de débogage veut que l'adresse IP dans request.META['REMOTE_ADDR'] soit définie dans le paramètre INTERNAL_IPS. Ajoutez une instruction print dans l'une de vos vues, par exemple :

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

Et ensuite, chargez cette page. Assurez-vous que cette IP est dans votre paramètre INTERNAL_IPS dans settings.py.

Normalement, je pense que vous devriez être en mesure de déterminer l'adresse facilement en regardant l'adresse IP de votre ordinateur, mais dans mon cas, je fais tourner le serveur dans une boîte virtuelle avec une redirection de port... et qui sait ce qui s'est passé. Bien qu'elle n'apparaisse nulle part dans ifconfig sur la VB ou sur mon propre système d'exploitation, l'adresse IP qui apparaît dans la clé REMOTE_ADDR est ce qui a permis d'activer la barre d'outils.

2 votes

J'accédais à ma page par le biais d'un proxy nginx, donc l'adresse distante était celle de mon proxy et non ma véritable adresse IP. Je devais ajouter l'adresse IP de mon proxy à INTERNAL_IPS et ça a commencé à fonctionner.

1 votes

Depuis ma machine invitée dans VirtualBox, ma machine hôte est vue comme 10.0.0.2, si cela peut aider quelqu'un. :)

0 votes

TRES utile pour vérifier l'IP si vous utilisez une virtualisation comme VAGRANT.

59voto

user1569050 Points 754

Si tout le reste est correct, il se peut que votre modèle ne comporte pas de clause de clôture explicite. <body> tag-

Remarque : la barre d'outils de débogage ne s'affiche que si le mimetype de la réponse est text/html ou application/xhtml+xml et contient une balise de fermeture.

0 votes

Dans mon cas, en ajoutant à settings.py DEBUG_TOOLBAR_CONFIG = {'INSERT_BEFORE':'</head>'} a travaillé

32voto

donturner Points 3552

La version stable actuelle 0.11.0 exige que les éléments suivants soient vrais pour que la barre d'outils s'affiche :

Fichier de paramètres :

  1. DEBUG = True
  2. INTERNAL_IPS pour inclure l'adresse IP de votre navigateur, par opposition à l'adresse du serveur. Si vous naviguez localement, cette adresse doit être INTERNAL_IPS = ('127.0.0.1',) . Si vous naviguez à distance spécifier votre adresse publique .
  3. L'application debug_toolbar à installer, c'est-à-dire INSTALLED_APPS = (..., 'debug_toolbar',)
  4. La classe middleware de la barre d'outils de débogage à ajouter, à savoir MIDDLEWARE_CLASSES = ('debug_toolbar.middleware.DebugToolbarMiddleware', ...) . Il doit être placé le plus tôt possible dans la liste.

Fichiers de modèles :

  1. Doit être de type text/html
  2. Doit avoir une fermeture </html> étiquette

Fichiers statiques :

Si vous servez du contenu statique, assurez-vous de collecter les css, js et html en le faisant :

./manage.py collectstatic 

Note sur les prochaines versions de django-debug-toolbar

Les versions de développement plus récentes ont ajouté des paramètres par défaut pour les points 2, 3 et 4, ce qui simplifie un peu la vie, mais comme toute version de développement, elle comporte des bogues. J'ai constaté que la dernière version de git a donné lieu à une ImproperlyConfigured erreur lors de l'exécution par nginx/uwsgi.

De toute façon, si vous voulez installer la dernière version de github, exécutez :

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

Vous pouvez également cloner un commit spécifique en faisant :

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

3 votes

En fait, c'est la balise <body></body> qui est nécessaire et non </html>.

15voto

César Bustíos Points 4505

La barre d'outils fonctionne parfaitement. Avec cette configuration :

  1. DEBUG = True
  2. INTERNAL_IPS = ('127.0.0.1', '192.168.0.1',)
  3. DEBUG_TOOLBAR_CONFIG = {'INTERCEPT_REDIRECTS': False,}
  4. L'intergiciel est le premier élément de 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',
)

J'espère que cela vous aidera

2 votes

Vous devriez probablement expurger votre adresse IP de votre réponse. En effet, la plupart des gens utilisent la large bande de nos jours et la plupart des connexions à large bande changent rarement, voire jamais, d'adresse IP. Vous ne voulez probablement pas que cela traîne sur les interwebs.

0 votes

192.168.*.* est une adresse IP locale interne attribuée à l'ordinateur par le routeur. L'adresse IP externe est différente.

0 votes

@rpod c'est exactement pourquoi quelqu'un l'a modifié comme ça.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X