django-debug-toolbar не отображается
Я посмотрел на другие вопросы и не могу понять...
Я сделал следующее, чтобы установить django-debug-toolbar:
- pip install django-debug-toolbar
- добавлены в промежуточные классы:
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:
INTERNAL_IPS = ('174.121.34.187',)
4 Добавлен debug_toolbar в установленные приложения
Я не получаю никаких ошибок или чего-то еще, и панель инструментов не отображается ни на одной странице, даже у администратора.
Я даже добавил каталог шаблонов debug_toolbar в свой TEMPLATE_DIRS
38 ответов
Глупый вопрос, но ты об этом не упомянул, так что... 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,
}
Их тесты используют этот словарь.
Панель инструментов отладки требует, чтобы 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, был тем, что помогло активировать панель инструментов.
Если все остальное в порядке, возможно, ваш шаблон не имеет явного закрытия <body>
тег-
докер
Если вы разрабатываете сервер 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
Текущая стабильная версия 0.11.0 требует, чтобы на панели инструментов отображалось следующее:
Файл настроек:
DEBUG = True
INTERNAL_IPS
включить IP-адрес вашего браузера, а не адрес сервера. Если просматривать локально, это должно бытьINTERNAL_IPS = ('127.0.0.1',)
, При удаленном просмотре просто укажите свой публичный адрес.- Приложение debug_toolbar для установки, т.е.
INSTALLED_APPS = (..., 'debug_toolbar',)
- Добавляется класс промежуточного программного обеспечения панели отладки, т.е.
MIDDLEWARE_CLASSES = ('debug_toolbar.middleware.DebugToolbarMiddleware', ...)
, Он должен быть размещен как можно раньше в списке.
Файлы шаблонов:
- Должен быть типа
text/html
- Должен иметь закрытие
</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
Я перепробовал все, от установки DEBUG = True
к настройкам INTERNAL_IPS
на IP-адрес моего клиента и даже настройку Django Debug Toolbar вручную (обратите внимание, что в последних версиях все конфигурации выполняются автоматически, такие как добавление промежуточного программного обеспечения и URL-адресов). На удаленном сервере разработки ничего не работало (хотя оно работало локально). ЕДИНСТВЕННАЯ вещь, которая работала, настраивала панель инструментов следующим образом:
DEBUG_TOOLBAR_CONFIG = {
"SHOW_TOOLBAR_CALLBACK" : lambda request: True,
}
Это заменяет метод по умолчанию, который решает, должна ли отображаться панель инструментов, и всегда возвращает true.
У меня панель инструментов работает просто отлично. С этой конфигурации:
DEBUG = True
INTERNAL_IPS = ('127.0.0.1', '192.168.0.1',)
DEBUG_TOOLBAR_CONFIG = {'INTERCEPT_REDIRECTS': False,}
- Промежуточное программное обеспечение является первым элементом в
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', )
Я надеюсь, что это помогает
Добавлять 10.0.2.2
к вашему INTERNAL_IPS в Windows, он используется с vagrant внутри
INTERNAL_IPS = ( '10.0.2.2',)
Это должно работать.
У меня была та же проблема и, наконец, я решил ее после некоторого поиска в Google.
В INTERNAL_IPS вам необходимо указать IP-адрес клиента.
Я знаю, что этот вопрос немного устарел, но сегодня я установил 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]
Как я читал в комментарии, проблема в том, что докер использует динамический IP-адрес, чтобы решить эту проблему, мы можем получить IP-адрес из кода выше.
Как вы сказали, я настроил все, что указано в документации, но панель debug_toolbar не появлялась. Затем я попробовал его в Firefox, он работал нормально.
Затем из Chrome я просматриваю веб-страницу и меняю имя класса class="djdt-hidden". Вы можете попробовать изменить его или удалить.
запустите manage.py collectstatic и повторите описанный выше шаг.
На самом деле вы можете пропустить шаги 2 и 3, отредактировав
.djdt-hidden{ display: none;}
с пути
debug_toolbar/static/debug_toolbar/css/toolbar.css
Добавьте эти две строки где-нибудь в settings.py
import mimetypes
mimetypes.add_type("application/javascript", ".js", True)
в urls.py
import debug_toolbar
urlpatterns += [ path('__debug__/', include(debug_toolbar.urls)),]
Использовать эталонную установку панели инструментов отладки django
- Если это все еще не работает, создайте launch.json и укажите другой номер порта для отладки.
` {
"version": "0.2.0",
"configurations": [
{
"name": "Python: Django",
"type": "python",
"request": "launch",
"program": "${workspaceFolder}\\manage.py",
"args": [
"runserver",
"9000",
],
"django": true
}
]
} `
Еще одна вещь, которая может заставить панель инструментов оставаться скрытой, - это если она не может найти требуемые статические файлы. В шаблонах debug_toolbar используется тег шаблона {{ STATIC_URL }}, поэтому убедитесь, что в ваших статических файлах есть папка, называемая отладочной панелью инструментов.
Команда collectstatic management должна позаботиться об этом на большинстве установок.
Дополнение к предыдущим ответам:
если панель инструментов не отображается, но загружается в 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/
Или вручную переместите папку debug_toolbar статических файлов debug_toolbar в папку установленных статических файлов.
Джанго 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)),
)
Джанго 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',
# ...
]
Я попробовал конфигурацию из cookiecutter-django от pydanny, и она сработала для меня:
# 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.
В моем случае мне просто нужно было удалить скомпилированные файлы Python (*.pyc
)
Для меня это было так просто, как печатать 127.0.0.1:8000
в адресную строку, а не localhost:8000
который, очевидно, не соответствовал INTERNAL_IPS.
В моем случае это была еще одна проблема, о которой здесь еще не говорилось: у меня в списке промежуточных программ была GZipMiddleware.
Поскольку автоматическая конфигурация панели инструментов отладки помещает промежуточное программное обеспечение панели отладки в верхнюю часть, она только "видит" сжатый HTML-код, к которому не может добавить панель инструментов.
Я удалил GZipMiddleware в моих настройках разработки. Настройка конфигурации панели инструментов отладки вручную и размещение промежуточного программного обеспечения после GZip также должно работать.
Это не относится к данному конкретному автору, но я просто боролся за то, чтобы панель инструментов отладки не отображалась, и после выполнения всего, на что они указывали, я обнаружил, что это проблема с порядком 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',
)
Я получил ту же проблему, я решил ее, посмотрев журнал ошибок 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
Меня устраивает.
#urls.py
if settings.DEBUG:
from django.conf.urls.static import static
import debug_toolbar
import mimetypes
mimetypes.add_type("application/javascript", ".js", True)
urlpatterns += static(settings.STATIC_URL, document_root=settings.STATIC_ROOT)
urlpatterns += static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)
urlpatterns = [path('__debug__/', include(debug_toolbar.urls)), ] + urlpatterns
У меня была такая же проблема с использованием Vagrant. Я решил эту проблему, добавив ::ffff:192.168.33.1
к INTERNAL_IPS, как показано ниже.
INTERNAL_IPS = (
'::ffff:192.168.33.1',
)
Вспоминая это 192.168.33.10
это IP в моей частной сети в Vagrantfile.
Я собрал несколько из этих ответов в один, который сработал для меня. Версии:
Джанго 4.2.1
панель инструментов django-debug 4.1.0
Добавьте это в settings.py:
if DEBUG: import mimetypes mimetypes.add_type("application/javascript", ".js", True)
Удалите файлы pycache .pyc.
Очистить веб-кеш (ctrl+shft+delete)
В коде, над которым я работал, во время обработки основного запроса было сделано несколько небольших запросов (это очень специфический вариант использования). Это были запросы, обработанные тем же потоком Джанго. Панель отладки Django (DjDT) не ожидает такого поведения и включает панели инструментов DjDT в первый ответ, а затем удаляет свое состояние для потока. Поэтому, когда основной запрос был отправлен обратно в браузер, DjDT не был включен в ответ.
Извлеченные уроки: DjDT сохраняет свое состояние для каждого потока. Он удаляет состояние для потока после первого ответа.
такая же проблема после добавления
urls.py
mimetypes.add_type("application/javascript", ".js", True)
urlpatterns = [...
и
DEBUG_TOOLBAR_CONFIG = {
'INTERCEPT_REDIRECTS': False,
'SHOW_TOOLBAR_CALLBACK': lambda request: True,
'SHOW_TEMPLATE_CONTEXT': True,
'INSERT_BEFORE': '</head>'
}
добавлены файлы javascripts, но все теги имеют класс
djdt-hidden
и скрытый
<div id="djDebug" class="djdt-hidden" dir="ltr" data-default-show="true">
я использовал
GoogleChrome
в
FireFox
исправлена ошибка и на панели инструментов появляется значок django
Что меня достало, так это устаревший браузер!
Заметил, что он загружает некоторые таблицы стилей с панели отладки и предположил, что это может быть проблема внешнего интерфейса.
Я получал следующую ошибку, но смог увидеть связанные компоненты сdebug_toolbar
в исходном коде страницы. Затем проверьте страницу показывает ошибку ниже.
Не удалось загрузить сценарий модуля: ожидался сценарий модуля JavaScript, но сервер ответил типом MIME «текст/обычный». Строгая проверка типов MIME применяется для скриптов модулей в соответствии со спецификацией HTML.
Затем я добавил это вsettings.py
и ошибка исчезла, и я смог увидеть панель инструментов.
if DEBUG:
import mimetypes
mimetypes.add_type("application/javascript", ".js", True)
Если вы зайдете сюда и прочитаете главу 8 документации : по состоянию на 2023.9.3 это ошибка документации. Для простоты в документации Django не используются полноценные допустимые шаблоны HTML (см. примечание в разделе « Запись представлений, которые действительно что-то делают »). Это раздражает панель инструментов отладки.
Если вы посетите страницу, для которой не определен маршрут, или серверную часть, результирующая страница (с ошибкой) будет действительным HTML-документом, и панель инструментов будет видна.
Поэтому для решения проблемы создайтеBASE_DIR/templates/base.html
который содержит действительный HTML-документ, и оставьте свои шаблоны подBASE_DIR/polls/templates/polls
продлить его . Затем появится панель инструментов отладки.
Примечательная ошибка в этом контексте:{% extends "base.html" %}
может не найтиbase.html
в том же каталоге. Возможно, вам придется написать{% extends "polls/base.html" %}
вместо. Проверьте журнал ошибок, отображаемый в браузере, чтобы узнать, в каких каталогах выполнял поиск Django.
если вы используете Windows, это может быть из вашего реестра. установите для HKEY_CLASSES_ROOT.js\Content Type значение text/javascript вместо text/plain.
У меня такая же проблема, и я пробовал все вышеперечисленные решения, и ни одно из них не сработало. Затем я попытался выяснить, в чем основная проблема этой проблемы в моем проекте, и она исходила из файла шаблона. Убедитесь, что содержимое вашего шаблона находится внутри
<body></body>
.
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
</body>
</html>