django-debug-toolbar не відображається


132

Я переглянув інші питання і не можу це зрозуміти ...

Я зробив наступне, щоб встановити django-debug-toolbar:

  1. pip встановити django-debug-панель інструментів
  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


9
Якщо ви використовуєте Vagrant, переконайтеся, що ваш INTERNAL_IPSправильний. Один із способів перевірки - це перегляд, роздрукувати його request.META['REMOTE_ADDR'], а потім додати його до свого INTERNAL_IPS.
Буде чи

1
Це може комусь допомогти. Я намагався додавати '*'у внутрішні IP-адреси, але це не працює. Ви повинні ввести конкретні IP-адреси.
Luv33preet

У моїх налаштуваннях.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 (17.06.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
ІНТЕРНАЛІЙПС відмовився від мене. Дякую за інформацію
Лі

12
чи навітьSHOW_TOOLBAR_CALLBACK = lambda x: True
Джон Мі

6
@schillingt так, вибачте, я мав це перевірити. Я думаю, що мені довелося бігти, collectstaticщоб все з’явилося.
Роб Грант

81

Панель інструментів налагодження хоче, щоб ip-адреса в запиті.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 був не таким, як я міг би припустити.
Аарон Макміллін

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-tool

Новіші версії розробки додавали за замовчуванням пункти налаштування 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_IPSдо IP-адреси мого клієнта і навіть налаштувати панель інструментів налагодження Django вручну (зауважте, що останні версії роблять усі конфігурації автоматично, наприклад додавання проміжного програмного забезпечення та URL-адрес). Нічого не працювало на сервері віддаленої розробки (хоча це працювало локально). Тільки, що працювало, було налаштувати панель інструментів наступним чином:

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

Це замінює метод за замовчуванням, який вирішує, чи слід показувати панель інструментів, і завжди повертає значення true.


16

Докер

Якщо ви розробляєте сервер Django в контейнері Docker з докером, інструкції щодо включення панелі інструментів не працюють. Причина пов’язана з тим, що фактична адреса, яку вам потрібно було б додати, INTERNAL_IPSбуде чимось динамічною, як-от 172.24.0.1. Замість того, щоб намагатися динамічно встановити значення INTERNAL_IPS, прямим рішенням буде замінити функцію, яка дозволяє панелі інструментів, наприклад, у вашому settings.py:

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


Це також має працювати в інших динамічних ситуаціях, наприклад, бродячих.


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

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

тож якщо ви насправді не знаєте значення REMOTE_ADDRзавдяки динамічній маршрутизації докера, панель інструментів не працюватиме. Ви можете використовувати, наприклад, мережеву команду docker, щоб побачити динамічні значення 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.
Джош

Це найправильніше та найімовірніше рішення та найпростіший варіант :) Підтверджено роботу за допомогою бродяг на Windows 7
mislavcimpersak

6

У мене була така ж проблема, і нарешті її вирішили після деякого гуглінгу.

У INTERNAL_IPS потрібно мати IP-адресу клієнта .


4

Інша річ, яка може призвести до того, що панель інструментів залишається прихованою, якщо вона не може знайти потрібні статичні файли. У шаблонах debug_toolbar використовується тег шаблону {{STATIC_URL}}, тож переконайтеся, що у ваших статичних файлах є папка під назвою панель інструментів налагодження.

Команда collestatic management повинна подбати про це на більшості установок.


3

Додаток до попередніх відповідей:

якщо панель інструментів не відображається, але завантажується у html (перевірте html свого веб-сайту у браузері, прокрутіть вниз)

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

Його можна виправити наступним чином (приклади для nginx та apache):

nginx config:

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

докладніше про collestatic тут: https://docs.djangoproject.com/en/dev/ref/contrib/staticfiles/#collectstatic

Або вручну перемістити папку debug_toolbar статичних файлів debug_toolbar у встановлену папку статичних файлів


3

Я спробував конфігурацію з 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-tool , оскільки я використовую Django 1.7.


2

У моєму випадку це була ще одна проблема, про яку досі не згадувалося: я мав GZipMiddleware у своєму списку середнього рівня.

Оскільки автоматична конфігурація панелі інструментів налагодження ставить посереднє програмне забезпечення панелі інструментів налагодження у верхній частині, вона отримує лише "побачити" gzipped HTML, до якого він не може додати панель інструментів.

У налаштуваннях розробки я видалив GZipMiddleware. Налаштування конфігурації панелі інструментів налагодження вручну та розміщення проміжного програмного забезпечення після GZip також має працювати.


Навіть включення GZip на рівні перегляду gzip_pageзмушує панель інструментів зникати. docs.djangoproject.com/uk/2.0/topics/http/decorators/…
Brachamul

2

У моєму випадку мені просто потрібно було видалити файли, складені python ( *.pyc)


Дякую за цей коментар, це врятувало мене психічний зрив сьогодні вранці. Якщо все інше виглядає правильно - і цей проект працював до мене просто чудово - спробуйте це і подивіться, чи вирішує він це. DDT HTML / JS був на сторінці, все виглядало нормально, але насправді все одно не відображатиметься. Я очистив файли pyc, і він почав з’являтися знову
Шейн

2

джанго 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',
# ...
]

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 Тампонна папка 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
  • Звичайно, ви повинні змінити ваш пітон шлях

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 з docker і зіткнувся з тією ж проблемою, це вирішило це для мене

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

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

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.