django-debug-toolbar tidak muncul

132

Saya melihat pertanyaan lain dan tidak bisa mengetahuinya ...

Saya melakukan yang berikut ini untuk menginstal django-debug-toolbar:

  1. pip instal django-debug-toolbar
  2. ditambahkan ke kelas middleware:
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 Menambahkan INTERNAL_IPS:

INTERNAL_IPS = ('174.121.34.187',)

4 Menambahkan debug_toolbar ke aplikasi yang diinstal

Saya tidak mendapatkan kesalahan atau apa pun, dan bilah alat tidak muncul di halaman mana pun, bahkan admin.

Saya bahkan menambahkan direktori templat debug_toolbar ke folder saya TEMPLATE_DIRS

AlexBrand
sumber
9
Jika Anda menggunakan Vagrant, pastikan Anda INTERNAL_IPSbenar. Salah satu cara untuk memeriksa adalah dalam tampilan, cetak request.META['REMOTE_ADDR'], lalu tambahkan ke INTERNAL_IPS.
Will
1
Ini mungkin membantu seseorang. Saya mencoba dengan menambahkan '*'IP internal, tetapi itu tidak berhasil. Anda harus memasukkan IP tertentu.
Luv33palam
Di settings.py saya, sekarang hanya MIDDLEWARE, bukan MIDDLEWARE_CLASSES
bertie

Jawaban:

174

Pertanyaan bodoh, tetapi Anda tidak menyebutkannya, jadi ... Apa yang DEBUGdiatur? Itu tidak akan dimuat kecuali jika itu True.

Jika masih tidak berfungsi, coba tambahkan '127.0.0.1' INTERNAL_IPSjuga.

MEMPERBARUI

Ini adalah langkah terakhir upaya, Anda tidak harus melakukan ini, tetapi ini akan menunjukkan dengan jelas jika hanya ada beberapa masalah konfigurasi atau apakah ada masalah yang lebih besar.

Tambahkan yang berikut ini ke settings.py:

def show_toolbar(request):
    return True
SHOW_TOOLBAR_CALLBACK = show_toolbar

Itu secara efektif akan menghapus semua pemeriksaan oleh toolbar debug untuk menentukan apakah harus atau tidak memuatnya sendiri; itu akan selalu hanya memuat. Biarkan saja itu untuk tujuan pengujian, jika Anda lupa dan meluncurkannya, semua pengunjung Anda akan melihat bilah alat debug Anda juga.

Untuk konfigurasi eksplisit, lihat juga dokumen resmi instal di sini .

EDIT (17/06/2015):

Rupanya sintaks untuk opsi nuklir telah berubah. Sekarang dalam kamus sendiri:

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

Tes mereka menggunakan kamus ini.

Chris Pratt
sumber
3
Ya, jadi ada beberapa masalah besar yang terjadi di sini. Jika Anda menggunakan sesuatu selain runserverpastikan Anda me-restart itu. Heck, restart runserverjuga. Pastikan perubahan Anda ke settings.py benar - benar disimpan / dikomit. Anda mungkin ingin mencoba menghapus file * .pyc. Di * nix, Anda bisa melakukannya hanya dengan find . -name "*.pyc" -exec rm {} \;dari root proyek. Akhirnya, jalankan python manage.py shelldan jalankan from django.conf import settingsdan periksa nilai settings.INSTALLED_APPs.
Chris Pratt
3
Saya tidak yakin apa yang Anda maksud dengan pertanyaan terakhir, tetapi jika Anda merujuk INTERNAL_IPS, itu untuk klien bukan server (Django). Dengan kata lain, Anda masukkan ke dalam Anda alamat IP sehingga Anda dapat melihat men-debug toolbar, tidak peduli apa IP situs dapat berjalan pada.
Chris Pratt
10
INTERNAL_IPS juga membuat saya .. Terima kasih atas informasinya
Lee
12
atau bahkanSHOW_TOOLBAR_CALLBACK = lambda x: True
John Mee
6
@schillingt ya, maaf saya harus memeriksa ini. Saya pikir saya harus berlari collectstaticuntuk membuat semuanya muncul.
Rob Grant
80

Debug toolbar menginginkan alamat ip dalam request.META ['REMOTE_ADDR'] diatur dalam pengaturan INTERNAL_IPS. Lemparkan pernyataan cetak di salah satu tampilan Anda seperti:

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

Dan kemudian muat halaman itu. Pastikan IP ada di pengaturan INTERNAL_IPS Anda di settings.py.

Biasanya saya pikir Anda akan dapat menentukan alamat dengan mudah dengan melihat alamat ip komputer Anda, tetapi dalam kasus saya, saya menjalankan server di Virtual Box dengan port forwarding ... dan siapa yang tahu apa yang terjadi. Meskipun tidak melihatnya di mana pun di ifconfig pada VB atau OS saya sendiri, IP yang muncul di kunci REMOTE_ADDR adalah apa trik mengaktifkan toolbar.

timothyashaw
sumber
2
Saya mendapatkan halaman saya melalui nginx proxy pass sehingga remote_addr adalah proxy saya dan bukan ip asli saya. Saya perlu menambahkan alamat ip proxy saya INTERNAL_IPSdan mulai bekerja.
Kurt
1
Dari mesin tamu saya di VirtualBox, mesin host saya terlihat sebagai 10.0.0.2, jika dapat membantu seseorang. :)
mrmuggles
SANGAT berguna untuk
MEMERIKSA
3
Di buruh pelabuhan, REMOTE_ADDR saya tidak seperti yang saya kira.
Aaron McMillin
28

Versi stabil saat ini 0.11.0 membutuhkan hal-hal berikut untuk menjadi benar agar bilah alat ditampilkan:

File pengaturan:

  1. DEBUG = True
  2. INTERNAL_IPSuntuk memasukkan alamat IP browser Anda, sebagai lawan dari alamat server. Jika menjelajah secara lokal ini seharusnya INTERNAL_IPS = ('127.0.0.1',). Jika menjelajah jarak jauh cukup tentukan alamat publik Anda .
  3. Aplikasi debug_toolbar yang akan diinstal yaitu INSTALLED_APPS = (..., 'debug_toolbar',)
  4. Kelas middleware debug toolbar yang akan ditambahkan yaitu MIDDLEWARE_CLASSES = ('debug_toolbar.middleware.DebugToolbarMiddleware', ...). Itu harus ditempatkan sedini mungkin dalam daftar.

File template:

  1. Harus bertipe text/html
  2. Harus memiliki </html>tag penutup

File statis:

Jika Anda menyajikan konten statis, pastikan Anda mengumpulkan css, js, dan html dengan melakukan:

./manage.py collectstatic 


Perhatikan pada versi mendatang dari Django-debug-toolbar

Namun, versi pengembangan yang lebih baru telah menambahkan default untuk pengaturan poin 2, 3 dan 4 yang membuat hidup sedikit lebih sederhana, seperti halnya versi pengembangan yang memiliki bug. Saya menemukan bahwa versi terbaru dari git menghasilkan ImproperlyConfiguredkesalahan ketika menjalankan melalui nginx / uwsgi.

Either way, jika Anda ingin menginstal versi terbaru dari github run:

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

Anda juga dapat mengkloning komit tertentu dengan melakukan:

pip install -e git+https://github.com/django-debug-toolbar/django-debug-toolbar.git@ba5af8f6fe7836eef0a0c85dd1e6d7418bc87f75#egg=django_debug_toolbar
pelanggar
sumber
2
sebenarnya tag <body> </body> yang tidak perlu </html>
Zgr3doo
20

Saya mencoba semuanya, dari pengaturan DEBUG = True, pengaturan INTERNAL_IPSke alamat IP klien saya, dan bahkan mengkonfigurasi Django Debug Toolbar secara manual (perhatikan bahwa versi terbaru membuat semua konfigurasi secara otomatis, seperti menambahkan middleware dan URL). Tidak ada yang berfungsi di server pengembangan jarak jauh (meskipun itu bekerja secara lokal). Satu-satunya hal yang berfungsi adalah mengonfigurasi bilah alat sebagai berikut:

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

Ini menggantikan metode default yang memutuskan apakah bilah alat harus ditampilkan, dan selalu mengembalikan true.

Anoyz
sumber
16

Buruh pelabuhan

Jika Anda mengembangkan dengan server Django di wadah Docker dengan buruh pelabuhan, petunjuk untuk mengaktifkan bilah alat tidak berfungsi. Alasannya terkait dengan fakta bahwa alamat aktual yang perlu Anda tambahkan INTERNAL_IPSakan menjadi sesuatu yang dinamis, seperti 172.24.0.1. Daripada mencoba menetapkan nilai secara dinamis INTERNAL_IPS, solusi langsung adalah mengganti fungsi yang memungkinkan bilah alat, settings.pymisalnya di:

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


Ini juga harus bekerja untuk situasi routing dinamis lainnya, seperti gelandangan.


Berikut ini beberapa detail lagi untuk yang penasaran. Kode dalam django_debug_tool yang menentukan apakah akan menampilkan bilah alat memeriksa nilai REMOTE_ADDRseperti ini:

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

jadi jika Anda tidak benar-benar tahu nilai REMOTE_ADDRkarena perutean buruh pelabuhan dinamis Anda, bilah alat tidak akan berfungsi. Anda dapat menggunakan perintah jaringan buruh pelabuhan untuk melihat nilai IP dinamis, misalnyadocker network inspect my_docker_network_name

Mark Chackerian
sumber
15

Saya memiliki toolbar berfungsi dengan sempurna. Dengan konfigurasi ini:

  1. DEBUG = True
  2. INTERNAL_IPS = ('127.0.0.1', '192.168.0.1',)
  3. DEBUG_TOOLBAR_CONFIG = {'INTERCEPT_REDIRECTS': False,}
  4. Middleware adalah elemen pertama di 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',
)

Saya harap ini membantu

Cesar
sumber
2
Anda mungkin harus mengubah alamat IP Anda dari jawaban Anda. Karena kebanyakan orang menjalankan broadband akhir-akhir ini dan sebagian besar koneksi broadband jarang mengubah alamat IP jika pernah. Anda mungkin tidak ingin itu berkeliaran di jalinan.
Chris Pratt
192.168. *. * Adalah alamat IP lokal internal yang ditetapkan untuk komputer oleh router. Alamat IP eksternal berbeda.
Robeezy
@rpod itulah tepatnya mengapa seseorang mengeditnya untuk itu.
Yuji 'Tomita' Tomita
Jika Anda menggunakan File Konfigurasi Sejati, dan hanya ingin Debug Toolbar di dev, alih-alih menambahkannya ke middleware_classes di base.pyAnda mungkin ingin menambahkan ini ke local.py: Anda MIDDLEWARE_CLASSES = ('debug_toolbar.middleware.DebugToolbarMiddleware',) + MIDDLEWARE_CLASSES.
Rob Grant
12

Tambahkan 10.0.2.2ke INTERNAL_IPS Anda di Windows, ini digunakan dengan gelandangan secara internal

INTERNAL_IPS = ('10 .0.2.2 ',)

Ini seharusnya bekerja.

Bas Koopmans
sumber
1
Mengonfirmasi ini telah memperbaiki masalah saya menggunakan Vagrant di OSX.
Josh
Ini adalah solusi yang paling benar dan paling mungkin dan yang paling sederhana :) Dikonfirmasi bekerja menggunakan gelandangan di windows 7
mislavcimpersak
6

Saya memiliki masalah yang sama dan akhirnya menyelesaikannya setelah beberapa googling.

Di INTERNAL_IPS, Anda harus memiliki alamat IP klien .

Farhan Hafeez
sumber
4

Hal lain yang dapat menyebabkan bilah alat tetap tersembunyi adalah jika tidak dapat menemukan file statis yang diperlukan. Template debug_toolbar menggunakan tag template {{STATIC_URL}}, jadi pastikan ada folder di file statis Anda yang disebut toolbar debug.

Perintah manajemen collectstatic harus menangani ini pada sebagian besar instalasi.

AgDude
sumber
3

Saya mencoba konfigurasi dari pydanny cookiecutter-django dan itu berhasil untuk saya:

# 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

Saya hanya memodifikasinya dengan menambahkan 'debug_toolbar.apps.DebugToolbarConfig'alih-alih 'debug_toolbar'seperti yang disebutkan dalam dokumen django-debug-toolbar resmi , karena saya menggunakan Django 1.7.

metakermit
sumber
2

Tambahan untuk jawaban sebelumnya:

jika bilah alat tidak muncul, tetapi dimuat di html (periksa situs Anda html di browser, gulir ke bawah)

masalahnya adalah file statis bilah alat debug tidak ditemukan (Anda juga dapat melihat ini di log akses situs Anda, misalnya, 404 kesalahan untuk /static/debug_toolbar/js/toolbar.js)

Itu dapat diperbaiki dengan cara berikut (contoh untuk nginx dan apache):

konfigurasi nginx:

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

konfigurasi apache:

Alias /static/debug_toolbar [path to your python site-packages here]/site-packages/debug_toolbar/static/debug_toolbar

Atau:

manage.py collectstatic

lebih lanjut tentang collectstatic di sini: https://docs.djangoproject.com/en/dev/ref/contrib/staticfiles/#collectstatic

Atau memindahkan secara manual folder debug_toolbar dari file statis debug_toolbar ke folder file statis yang Anda tentukan

Bob
sumber
2

Dalam kasus saya, itu adalah masalah lain yang belum disebutkan di sini: Saya punya GZipMiddleware dalam daftar middlewares saya.

Karena konfigurasi otomatis bilah alat debug menempatkan middleware bilah alat bilah alat di bagian atas, ia hanya mendapatkan "lihat" HTML yang di-gzip, yang tidak dapat ditambahkan bilah alat.

Saya menghapus GZipMiddleware di pengaturan pengembangan saya. Menyiapkan konfigurasi bilah alat debug secara manual dan menempatkan middleware setelah GZip juga akan berfungsi.

RemcoGerlich
sumber
Bahkan mengaktifkan GZip di tingkat tampilan dengan gzip_pagemembuat bilah alat menghilang. docs.djangoproject.com/en/2.0/topics/http/decorators/…
Brachamul
2

Dalam kasus saya, saya hanya perlu menghapus file yang dikompilasi python ( *.pyc)

dnaranjo
sumber
Terima kasih atas komentar ini, ini menyelamatkan saya dari gangguan mental pagi ini. Jika segalanya tampak benar - dan proyek ini telah bekerja dengan baik untuk saya - coba ini dan lihat apakah itu dapat menyelesaikannya. DDT HTML / JS ada di halaman, semuanya tampak baik-baik saja, tetapi masih tidak benar-benar muncul. Saya membersihkan file pyc dan mulai muncul lagi
Shane
2

Django 1.8.5:

Saya harus menambahkan yang berikut ke file url.py proyek untuk mendapatkan tampilan toolbar debug. Setelah itu bilah alat debug ditampilkan.

 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: dan lebih tinggi:

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

Juga jangan lupa untuk memasukkan debug_toolbar ke middleware Anda. Debug Toolbar sebagian besar diimplementasikan dalam middleware. Aktifkan itu di modul pengaturan Anda sebagai berikut: (Django versi yang lebih baru)


MIDDLEWARE = [
# ...
'debug_toolbar.middleware.DebugToolbarMiddleware',
#

Middleware gaya lama: (perlu memiliki _CLASSES keywork di Middleware)

MIDDLEWARE_CLASSES = [
# ...
'debug_toolbar.middleware.DebugToolbarMiddleware',
# ...
]
Stryker
sumber
1

Ini bukan kasus untuk penulis spesifik ini tetapi saya hanya berjuang dengan Debug Toolbar tidak muncul dan setelah melakukan semua yang mereka tunjukkan, saya menemukan itu adalah masalah dengan pesanan MIDDLEWARE. Jadi menempatkan middleware di awal daftar bisa berhasil. Milik saya yang pertama:

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

Anderson Santos
sumber
0

Anda harus memastikan ada tag penutup di templat Anda.

Masalah saya adalah bahwa tidak ada tag html biasa di templat saya, saya hanya menampilkan konten dalam teks biasa. Saya menyelesaikannya dengan mewarisi setiap file html dari base.html, yang memiliki tag.

pengguna1552891
sumber
0

Bagi saya ini sesederhana mengetik 127.0.0.1:8000ke bilah alamat, daripada localhost:8000yang tampaknya tidak cocok dengan INTERNAL_IPS.

TimStaley
sumber
0

Saya mendapat masalah yang sama, saya menyelesaikannya dengan melihat log kesalahan Apache. Saya menjalankan apache di mac os x dengan mod_wsgi Folder tamplete debug_toolbar tidak dimuat

Sampel log:

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

Saya hanya menambahkan baris ini ke file VirtualHost saya:

Alias /static/debug_toolbar /Library/Python/2.7/site-packages/debug_toolbar/static/debug_toolbar
  • Tentu saja Anda harus mengubah jalur python Anda
Andre Manzano
sumber
0

Saya memiliki masalah yang sama menggunakan Vagrant. Saya memecahkan masalah ini dengan menambahkan ::ffff:192.168.33.1ke INTERNAL_IPS seperti contoh di bawah ini.

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

Ingat itu 192.168.33.10adalah IP di jaringan pribadi saya di Vagrantfile.

Adriano Silva
sumber
0

Saya mengalami masalah ini dan harus menginstal bilah alat debug dari sumber.

Versi 1.4 memiliki masalah yang tersembunyi jika Anda menggunakan PureCSS dan tampaknya kerangka kerja CSS lainnya.

Ini adalah komit yang memperbaikinya.

Dokumen menjelaskan cara menginstal dari sumber.

Petko M
sumber
0

Bagi siapa saja yang menggunakan Pycharm 5 - debug template tidak berfungsi di sana dalam beberapa versi. Diperbaiki pada 5.0.4, vesions yang terpengaruh - 5.0.1, 5.0.2 Periksa masalah

Habiskan BANYAK waktu untuk mengetahuinya. Mungkin akan membantu seseorang

wolendranh
sumber
0

Dalam kode yang saya kerjakan, beberapa permintaan kecil dibuat selama menangani permintaan utama (ini adalah kasus penggunaan yang sangat spesifik). Itu adalah permintaan yang ditangani oleh utas Django yang sama. Django debug toolbar (DjDT) tidak mengharapkan perilaku ini dan menyertakan bilah alat DjDT ke respons pertama dan kemudian menghapus statusnya untuk utas. Jadi ketika permintaan utama dikirim kembali ke browser, DjDT tidak dimasukkan dalam respons.

Pelajaran yang dipelajari: DjDT menyimpan status itu per utas. Ini menghapus status utas setelah tanggapan pertama.

jozo
sumber
0

Apa yang membuat saya adalah browser yang ketinggalan jaman!

Melihat bahwa ia memuat beberapa stylesheet dari bilah alat debug dan menduga itu mungkin masalah front-end.

oguret
sumber
0

Saya tahu pertanyaan ini agak lama, tapi hari ini saya menginstal django-toolbar dengan buruh pelabuhan dan menemukan masalah yang sama, ini menyelesaikannya untuk saya

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]

Seperti yang saya baca di komentar, masalahnya adalah buruh pelabuhan menggunakan ip dinamis, untuk menyelesaikan ini kita bisa mendapatkan ip dari kode di atas

E berikutnyaiel Albornoz
sumber
-1

Satu hal bodoh membuat saya .. bahwa jika Anda menggunakan apache wsgi, ingatlah untuk menyentuh file .wsgi untuk memaksa kompilasi ulang kode Anda. buang waktu saya 20 menit untuk men-debug kesalahan bodoh :(

igameland
sumber