Панель инструментов django-debug не отображается


132

Я посмотрел на другие вопросы и не могу понять ...

Я сделал следующее для установки django-debug-toolbar:

  1. pip install django-debug-toolbar
  2. добавлено в классы промежуточного программного обеспечения:
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:

ВНУТРЕННИЙ_IPS = ('174.121.34.187',)

4 Добавлен debug_toolbar в установленные приложения

Я не получаю никаких ошибок или чего-то еще, и панель инструментов не отображается ни на одной странице, даже у администратора.

Я даже добавил каталог шаблонов debug_toolbar в свой TEMPLATE_DIRS


9
Если вы используете Vagrant, убедитесь, что ваш INTERNAL_IPSправильный. Один из способов проверить это в представлении, распечатать его request.META['REMOTE_ADDR'], а затем добавить в свой INTERNAL_IPS.
Будет

1
Это может кому-нибудь помочь. Я пытался добавить '*'внутренние IP-адреса, но это не сработало. Вы должны ввести конкретные IP-адреса.
Luv33preet

В моем settings.py теперь только MIDDLEWARE, а не MIDDLEWARE_CLASSES
bertie

Ответы:


175

Глупый вопрос, но вы не упомянули об этом, так что ... Что DEBUGустановлено? Он не будет загружаться, если это не так True.

Если он по-прежнему не работает, попробуйте также добавить «127.0.0.1» INTERNAL_IPS.

ОБНОВИТЬ

Это последний шаг, который вам не нужен, вам не нужно этого делать, но он ясно покажет, есть ли какая-то проблема с конфигурацией или есть какая-то большая проблема.

Добавьте в settings.py следующее:

def show_toolbar(request):
    return True
SHOW_TOOLBAR_CALLBACK = show_toolbar

Это эффективно удалит все проверки с помощью панели инструментов отладки, чтобы определить, должна ли она или не должна загружаться сама; он всегда будет просто загружаться. Оставьте это только для целей тестирования, если вы забудете и запустите его, все ваши посетители также увидят вашу панель отладки.

Для явной настройки также см. Официальную документацию по установке здесь .

EDIT (6/17/2015):

Видимо, синтаксис для ядерной опции изменился. Теперь это в своем собственном словаре:

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

Их тесты используют этот словарь.


3
Да, так что здесь есть какая-то большая проблема. Если вы используете что-то другое, не runserverзабудьте перезапустить его. Черт возьми, перезагрузи runserverтоже. Убедитесь, что ваши изменения в settings.py действительно сохранены / зафиксированы. Вы можете попробовать удалить файлы * .pyc. В * nix вы можете сделать это просто find . -name "*.pyc" -exec rm {} \;из корня проекта. Наконец, запустите python manage.py shellи выполните from django.conf import settingsи проверьте значение settings.INSTALLED_APPs.
Крис Пратт,

3
Я не уверен, что вы имеете в виду, отвечая на последний вопрос, но если вы имеете в виду INTERNAL_IPS, они предназначены для клиента, а не для сервера (Django). Другими словами, вы кладете в ваш IP - адрес , чтобы вы можете увидеть отладки панели инструментов, независимо от того , что IP - сайт может быть запущен на.
Крис Пратт

10
INTERNAL_IPS получил меня также .. Спасибо за информацию
Ли

12
или дажеSHOW_TOOLBAR_CALLBACK = lambda x: True
Джон Ми

6
@schillingt да, извините, я должен был это проверить. Я думаю, мне пришлось бежать, collectstaticчтобы все появилось.
Роб Грант

81

Панель инструментов отладки хочет, чтобы IP-адрес в request.META ['REMOTE_ADDR'] был установлен в настройке INTERNAL_IPS. Добавьте выражение для печати в одно из ваших представлений, например:

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

И затем загрузите эту страницу. Убедитесь, что IP указан в настройке INTERNAL_IPS в settings.py.

Обычно я думал, что вы сможете легко определить адрес, посмотрев на IP-адрес вашего компьютера, но в моем случае я запускаю сервер в виртуальном ящике с переадресацией портов ... и кто знает, что произошло. Несмотря на то, что я не видел его нигде в ifconfig на VB или в моей собственной ОС, IP-адрес, отображаемый в ключе REMOTE_ADDR, был тем, что помогло активировать панель инструментов.


2
Я попал на свою страницу через прокси-сервер nginx, поэтому remote_addr был моим прокси, а не моим настоящим IP. Мне нужно было добавить свой IP-адрес прокси, INTERNAL_IPSи он начал работать.
Курт

1
С моей гостевой машины в VirtualBox мой хост-компьютер отображается как 10.0.0.2, если это может кому-то помочь. :)
mrmuggles

ОЧЕНЬ полезно ПРОВЕРИТЬ IP, если вы используете виртуализацию вроде VAGRANT
andilabs

3
В докере мой REMOTE_ADDR был не таким, как я предполагал.
Aaron

50

В моем случае добавление в settings.py DEBUG_TOOLBAR_CONFIG = {'INSERT_BEFORE':'</head>'}сработало
wojteck

28

Текущая стабильная версия 0.11.0 требует, чтобы для отображения панели инструментов выполнялись следующие условия:

Файл настроек:

  1. DEBUG = True
  2. INTERNAL_IPSчтобы указать IP-адрес вашего браузера, а не адрес сервера. Если просматривать локально, это должно быть INTERNAL_IPS = ('127.0.0.1',). Если вы просматриваете удаленно, просто укажите свой публичный адрес .
  3. Устанавливаемое приложение debug_toolbar, т.е. INSTALLED_APPS = (..., 'debug_toolbar',)
  4. Отладки класс инструментов промежуточного слоя , которые будут добавлены ИЭ MIDDLEWARE_CLASSES = ('debug_toolbar.middleware.DebugToolbarMiddleware', ...). Его следует разместить в списке как можно раньше.

Файлы шаблонов:

  1. Должен быть типа text/html
  2. Должен иметь закрывающий </html>тег

Статические файлы:

Если вы обслуживаете статический контент, убедитесь, что вы собираете css, js и html, выполнив:

./manage.py collectstatic 


Замечание о следующих версиях django-debug-toolbar

Более новые версии для разработчиков добавили значения по умолчанию для пунктов настроек 2, 3 и 4, что делает жизнь немного проще, однако, как и в любой версии для разработки, в ней есть ошибки. Я обнаружил, что последняя версия из git привела к ImproperlyConfiguredошибке при запуске через nginx / uwsgi.

В любом случае, если вы хотите установить последнюю версию с github, запустите:

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

2
на самом деле его тег <body> </body>, который не нужен </html>
Zgr3doo

20

Я перепробовал все, от настроек DEBUG = Trueдо настроек INTERNAL_IPSIP-адреса моего клиента, и даже вручную настраивал Django Debug Toolbar (обратите внимание, что в последних версиях все конфигурации выполняются автоматически, например, добавление промежуточного программного обеспечения и URL-адресов). На удаленном сервере разработки ничего не работало (хотя оно работало локально). ЕДИНСТВЕННАЯ вещь, которая работала, настраивала панель инструментов следующим образом:

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

Это заменяет метод по умолчанию, который определяет, должна ли отображаться панель инструментов, и всегда возвращает true.


16

докер

Если вы разрабатываете сервер Django в Docker- контейнере с Docker , инструкции по включению панели инструментов не работают. Причина связана с тем, что фактический адрес, к которому вам нужно будет добавить, INTERNAL_IPSбудет динамичным, например, 172.24.0.1. Вместо того, чтобы пытаться динамически установить значение INTERNAL_IPS, простое решение состоит в том, чтобы заменить функцию, которая включает панель инструментов, в вашем settings.py, например:

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


Это также должно работать для других ситуаций динамической маршрутизации, например vagrant.


Вот еще несколько подробностей для любопытных. Код в django_debug_tool, который определяет, показывать ли панель инструментов, проверяет значение REMOTE_ADDRследующим образом:

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

так что если вы на самом деле не знаете значение из- REMOTE_ADDRза вашей динамической маршрутизации докера, панель инструментов не будет работать. Вы можете использовать команду docker network для просмотра динамических значений IP, напримерdocker network inspect my_docker_network_name


15

У меня панель инструментов работает просто идеально. С этой конфигурацией:

  1. DEBUG = True
  2. INTERNAL_IPS = ('127.0.0.1', '192.168.0.1',)
  3. DEBUG_TOOLBAR_CONFIG = {'INTERCEPT_REDIRECTS': False,}
  4. Промежуточное ПО - это первый элемент в 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',
)

Я надеюсь, что это помогает


2
Вероятно, вам следует удалить свой IP-адрес из своего ответа. Поскольку в наши дни большинство людей используют широкополосный доступ, и большинство широкополосных соединений редко меняют IP-адрес, если вообще когда-либо. Вы, вероятно, не хотите, чтобы это валялось в сети.
Крис Пратт,

192.168. *. * - это внутренний локальный IP-адрес, назначенный компьютеру маршрутизатором. Внешний IP-адрес другой.
Robeezy

@rpod, именно поэтому кто-то отредактировал это.
Yuji 'Tomita' Tomita

Если вы используете один истинный Config File, и только хотите Debug Toolbar в разработчике, вместо того , чтобы добавить его к MIDDLEWARE_CLASSES в base.pyвас , возможно , захотите , чтобы добавить это к вашему local.py: MIDDLEWARE_CLASSES = ('debug_toolbar.middleware.DebugToolbarMiddleware',) + MIDDLEWARE_CLASSES.
Роб Грант

12

Добавьте 10.0.2.2в свой INTERNAL_IPS в Windows, он используется с бродягой внутри

INTERNAL_IPS = ('10 .0.2.2 ',)

Это должно работать.


1
Подтверждено, что это решило мою проблему с использованием Vagrant на OSX.
Джош

Это наиболее правильное, наиболее вероятное и простое решение :) Подтверждена работа с использованием vagrant на windows 7
mislavcimpersak

6

У меня была та же проблема и, наконец, я решил ее после некоторого поиска в Google.

В INTERNAL_IPS вам нужен IP-адрес клиента .


4

Еще одна вещь, из-за которой панель инструментов может оставаться скрытой, - это невозможность найти необходимые статические файлы. Шаблоны debug_toolbar используют тег шаблона {{STATIC_URL}}, поэтому убедитесь, что в ваших статических файлах есть папка, называемая панелью инструментов отладки.

Команда управления collectstatic должна позаботиться об этом на большинстве установок.


3

Дополнение к предыдущим ответам:

если панель инструментов не отображается, но загружается в HTML (проверьте HTML своего сайта в браузере, прокрутите вниз)

проблема может заключаться в том, что статические файлы панели инструментов отладки не найдены (вы также можете увидеть это в журналах доступа вашего сайта, например, ошибки 404 для /static/debug_toolbar/js/toolbar.js)

Тогда это можно исправить следующим образом (примеры для nginx и apache):

Конфигурация nginx:

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

Конфигурация apache:

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 в установленную папку статических файлов


3

Я попробовал конфигурацию из pydanny 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

Я просто изменил его, добавив 'debug_toolbar.apps.DebugToolbarConfig'вместо того, 'debug_toolbar'как указано в официальных документах django-debug-toolbar , поскольку я использую Django 1.7.


2

В моем случае это была еще одна проблема, о которой здесь еще не упоминалось: в моем списке промежуточного программного обеспечения было GZipMiddleware.

Поскольку автоматическая конфигурация панели инструментов отладки помещает промежуточное программное обеспечение панели отладки вверху, она только «видит» сжатый HTML-код, к которому не может добавить панель инструментов.

Я удалил GZipMiddleware в моих настройках разработки. Настройка конфигурации панели инструментов отладки вручную и размещение промежуточного программного обеспечения после GZip также должно работать.


Даже включение GZip на уровне просмотра gzip_pageделает панель инструментов исчезающей. docs.djangoproject.com/en/2.0/topics/http/decorators/…
Brachamul

2

В моем случае мне просто нужно было удалить скомпилированные файлы python ( *.pyc)


Спасибо за этот комментарий, сегодня утром он спас меня от нервного срыва. Если все остальное выглядит правильно - и этот проект работал раньше, просто отлично для меня - попробуйте это и посмотрите, разрешит ли это. ДДТ HTML / JS был на странице, все выглядело хорошо, но на самом деле он не показывался. Я очистил файлы pyc, и он снова начал появляться
Шейн

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

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


0

вы должны убедиться, что в ваших шаблонах есть закрывающий тег.

Моя проблема в том, что в моих шаблонах нет обычных HTML-тегов, я просто отображаю текст в виде простого текста. Я решил это, унаследовав каждый HTML-файл от base.html, который имеет тег.


0

Для меня это было так же просто, как ввести 127.0.0.1:8000в адресную строку, а не то, localhost:8000что явно не соответствовало INTERNAL_IPS.


0

Я получил ту же проблему, я решил ее, посмотрев журнал ошибок Apache. У меня запущен apache на mac os x с mod_wsgi. Папка tamplete debug_toolbar не загружалась

Образец журнала:

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

0

У меня была такая же проблема с использованием Vagrant. Я решил эту проблему, добавив ::ffff:192.168.33.1к INTERNAL_IPS, как показано ниже.

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

Помните, что 192.168.33.10это IP в моей частной сети в Vagrantfile.


0

У меня была эта проблема, и мне пришлось установить панель инструментов отладки из исходного кода.

В версии 1.4 есть проблема, которая скрыта, если вы используете PureCSS и, очевидно, другие CSS-фреймворки.

Это коммит, который исправляет это.

Документы объясняют, как установить из исходного кода.


0

Для всех, кто использует Pycharm 5, в некоторых версиях отладка шаблона не работает. Исправлено в 5.0.4, затронутые версии - 5.0.1, 5.0.2 Извлечь проблему

Потратьте много времени, чтобы выяснить это. Может кому поможет


0

В коде, над которым я работал, во время обработки основного запроса было сделано несколько небольших запросов (это очень специфический вариант использования). Это были запросы, обработанные тем же потоком Джанго. Панель инструментов отладки Django (DjDT) не ожидает такого поведения и включает панели инструментов DjDT в первый ответ, а затем удаляет свое состояние для потока. Поэтому, когда основной запрос был отправлен обратно в браузер, DjDT не был включен в ответ.

Извлеченные уроки: DjDT сохраняет свое состояние для каждого потока. Он удаляет состояние потока после первого ответа.


0

Что меня достало, так это устаревший браузер!

Заметил, что он загружает некоторые таблицы стилей с панели отладки и предположил, что это может быть проблема внешнего интерфейса.


0

Я знаю, что этот вопрос немного устарел, но сегодня я установил 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 из приведенного выше кода


-1

Одна глупая вещь меня поймала ... если вы используете apache wsgi, не забудьте прикоснуться к файлу .wsgi, чтобы принудительно перекомпилировать код. просто потратить 20 минут моего времени на отладку глупой ошибки :(

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.