django-debug-toolbar не отображается

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

Я сделал следующее, чтобы установить 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:

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, был тем, что помогло активировать панель инструментов.

докер

Если вы разрабатываете сервер 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 требует, чтобы на панели инструментов отображалось следующее:

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

  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

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

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

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

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

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

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

Добавлять 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-адрес из кода выше.

  1. Как вы сказали, я настроил все, что указано в документации, но панель debug_toolbar не появлялась. Затем я попробовал его в Firefox, он работал нормально.

  2. Затем из Chrome я просматриваю веб-страницу и меняю имя класса class="djdt-hidden". Вы можете попробовать изменить его или удалить.

  3. запустите manage.py collectstatic и повторите описанный выше шаг.

  4. На самом деле вы можете пропустить шаги 2 и 3, отредактировав

    .djdt-hidden{ display: none;}

    с пути

    debug_toolbar/static/debug_toolbar/css/toolbar.css

  5. Добавьте эти две строки где-нибудь в settings.py

    import mimetypes

    mimetypes.add_type("application/javascript", ".js", True)

  6. в urls.py

    import debug_toolbar

    urlpatterns += [ path('__debug__/', include(debug_toolbar.urls)),]

  7. Использовать эталонную установку панели инструментов отладки django

  1. Если это все еще не работает, создайте 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

  1. Добавьте это в settings.py:

            if DEBUG:
        import mimetypes
        mimetypes.add_type("application/javascript", ".js", True)
    
  2. Удалите файлы pycache .pyc.

  3. Очистить веб-кеш (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>

Другие вопросы по тегам