<p>django-debug-toolbarκ°€ django ν…ŒμŠ€νŠΈμ™€ μΆ©λŒν•©λ‹ˆλ‹€.</p>

에 λ§Œλ“  2018λ…„ 01μ›” 22일  Β·  11μ½”λ©˜νŠΈ  Β·  좜처: jazzband/django-debug-toolbar

django-debug-toolbar κ°€ docs 처럼 잘 μ„€μΉ˜λ˜κ³  μ„€μ •λ˜μ—ˆλ‹€λ©΄, django ν”„λ‘œμ νŠΈ ν…ŒμŠ€νŠΈ(eg: python manage.py test )λ₯Ό μ‹€ν–‰ν•  λ•Œ, 그리고 ν…ŒμŠ€νŠΈμ—μ„œ μ‚¬μš©λ˜λŠ” django reverse ν•¨μˆ˜(이것은 맀우 μ€‘μš”ν•©λ‹ˆλ‹€. ), λ‹€μŒκ³Ό 같은 였λ₯˜κ°€ λ°œμƒν•©λ‹ˆλ‹€.

======================================================================
ERROR: test_list (toolbar.tests.MyTests)
----------------------------------------------------------------------
Traceback (most recent call last):
  File "C:\Users\vm\Desktop\test_project\toolbar\tests.py", line 10, in test_li
st
    response = self.client.get(reverse('list'))
  File "C:\Python27\lib\site-packages\django\test\client.py", line 536, in get
    **extra)
  File "C:\Python27\lib\site-packages\django\test\client.py", line 340, in get
    return self.generic('GET', path, secure=secure, **r)
  File "C:\Python27\lib\site-packages\django\test\client.py", line 416, in gener
ic
    return self.request(**r)
  File "C:\Python27\lib\site-packages\django\test\client.py", line 501, in reque
st
    six.reraise(*exc_info)
  File "C:\Python27\lib\site-packages\django\core\handlers\exception.py", line 4
1, in inner
    response = get_response(request)
  File "C:\Python27\lib\site-packages\django\utils\deprecation.py", line 142, in
 __call__
    response = self.process_response(request, response)
  File "C:\Python27\lib\site-packages\debug_toolbar\middleware.py", line 134, in
 process_response
    bits[-2] += toolbar.render_toolbar()
  File "C:\Python27\lib\site-packages\debug_toolbar\toolbar.py", line 64, in ren
der_toolbar
    return render_to_string('debug_toolbar/base.html', context)
  File "C:\Python27\lib\site-packages\django\template\loader.py", line 68, in re
nder_to_string
    return template.render(context, request)
  File "C:\Python27\lib\site-packages\django\template\backends\django.py", line
66, in render
    return self.template.render(context)
  File "C:\Python27\lib\site-packages\django\template\base.py", line 207, in ren
der
    return self._render(context)
  File "C:\Python27\lib\site-packages\django\test\utils.py", line 107, in instru
mented_test_render
    return self.nodelist.render(context)
  File "C:\Python27\lib\site-packages\django\template\base.py", line 990, in ren
der
    bit = node.render_annotated(context)
  File "C:\Python27\lib\site-packages\django\template\base.py", line 957, in ren
der_annotated
    return self.render(context)
  File "C:\Python27\lib\site-packages\django\template\defaulttags.py", line 216,
 in render
    nodelist.append(node.render_annotated(context))
  File "C:\Python27\lib\site-packages\django\template\base.py", line 957, in ren
der_annotated
    return self.render(context)
  File "C:\Python27\lib\site-packages\django\template\defaulttags.py", line 322,
 in render
    return nodelist.render(context)
  File "C:\Python27\lib\site-packages\django\template\base.py", line 990, in ren
der
    bit = node.render_annotated(context)
  File "C:\Python27\lib\site-packages\django\template\base.py", line 957, in ren
der_annotated
    return self.render(context)
  File "C:\Python27\lib\site-packages\django\template\defaulttags.py", line 322,
 in render
    return nodelist.render(context)
  File "C:\Python27\lib\site-packages\django\template\base.py", line 990, in ren
der
    bit = node.render_annotated(context)
  File "C:\Python27\lib\site-packages\django\template\base.py", line 957, in ren
der_annotated
    return self.render(context)
  File "C:\Python27\lib\site-packages\django\template\base.py", line 1040, in re
nder
    output = self.filter_expression.resolve(context)
  File "C:\Python27\lib\site-packages\django\template\base.py", line 708, in res
olve
    obj = self.var.resolve(context)
  File "C:\Python27\lib\site-packages\django\template\base.py", line 849, in res
olve
    value = self._resolve_lookup(context)
  File "C:\Python27\lib\site-packages\django\template\base.py", line 890, in _re
solve_lookup
    current = getattr(current, bit)
  File "C:\Python27\lib\site-packages\debug_toolbar\panels\__init__.py", line 96
, in content
    return render_to_string(self.template, self.get_stats())
  File "C:\Python27\lib\site-packages\django\template\loader.py", line 68, in re
nder_to_string
    return template.render(context, request)
  File "C:\Python27\lib\site-packages\django\template\backends\django.py", line
66, in render
    return self.template.render(context)
  File "C:\Python27\lib\site-packages\django\template\base.py", line 207, in ren
der
    return self._render(context)
  File "C:\Python27\lib\site-packages\django\test\utils.py", line 107, in instru
mented_test_render
    return self.nodelist.render(context)
  File "C:\Python27\lib\site-packages\django\template\base.py", line 990, in ren
der
    bit = node.render_annotated(context)
  File "C:\Python27\lib\site-packages\django\template\base.py", line 957, in ren
der_annotated
    return self.render(context)
  File "C:\Python27\lib\site-packages\django\template\defaulttags.py", line 322,
 in render
    return nodelist.render(context)
  File "C:\Python27\lib\site-packages\django\template\base.py", line 990, in ren
der
    bit = node.render_annotated(context)
  File "C:\Python27\lib\site-packages\django\template\base.py", line 957, in ren
der_annotated
    return self.render(context)
  File "C:\Python27\lib\site-packages\django\template\defaulttags.py", line 216,
 in render
    nodelist.append(node.render_annotated(context))
  File "C:\Python27\lib\site-packages\django\template\base.py", line 957, in ren
der_annotated
    return self.render(context)
  File "C:\Python27\lib\site-packages\django\template\defaulttags.py", line 458,
 in render
    url = reverse(view_name, args=args, kwargs=kwargs, current_app=current_app)
  File "C:\Python27\lib\site-packages\django\urls\base.py", line 87, in reverse
    raise NoReverseMatch("%s is not a registered namespace" % key)
NoReverseMatch: u'djdt' is not a registered namespace

----------------------------------------------------------------------
Ran 1 test in 0.085s

FAILED (errors=1)
Destroying test database for alias 'default'...

ν™˜κ²½

파이썬: 2.7.14
μž₯κ³ : 1.11.9
μž₯κ³  디버그 도ꡬ λͺ¨μŒ: 1.9.1

ν…ŒμŠ€νŠΈ 파일 μƒ˜ν”Œ

# -*- coding: utf-8 -*-
from __future__ import unicode_literals

from django.test import TestCase
from django.core.urlresolvers import reverse

# Create your tests here.
class MyTests(TestCase):
    def test_list(self):
        response = self.client.get(reverse('list'))
        self.assertEqual(response.status_code, 200)

κ°€μž₯ μœ μš©ν•œ λŒ“κΈ€

같은 λ¬Έμ œκ°€ λ°œμƒν–ˆμŠ΅λ‹ˆλ‹€. 제 κ²½μš°μ—λŠ” SHOW_TOOLBAR_CALLBACK λ₯Ό μž¬μ •μ˜ν•˜μ—¬ $# DEBUG 값을 λ°˜ν™˜ν–ˆμŠ΅λ‹ˆλ‹€. ν•΄κ²° 방법은 django.conf.settings λ₯Ό κ°€μ Έμ˜€κ³  λŒ€μ‹  settings.DEBUG λ₯Ό λ°˜ν™˜ν•˜λŠ” κ²ƒμž…λ‹ˆλ‹€.

λͺ¨λ“  11 λŒ“κΈ€

이것에 λŒ€ν•œ μ†Œμ‹μ΄ μžˆμŠ΅λ‹ˆκΉŒ?

Django ν…ŒμŠ€νŠΈ λŸ¬λ„ˆλŠ” DEBUG=False λ₯Ό κ°•μ œλ‘œ μ„€μ •ν•©λ‹ˆλ‹€. μ΄λŠ” 디버그 도ꡬ λͺ¨μŒμ˜ URL νŒ¨ν„΄μ„ μ‚¬μš©ν•  수 μ—†μŒμ„ μ˜λ―Έν•©λ‹ˆλ‹€.

ν…ŒμŠ€νŠΈλ₯Ό μ‹€ν–‰ν•  λ•Œ MIDDLEWARE μ—μ„œ 미듀웨어λ₯Ό μ œκ±°ν•˜μ‹­μ‹œμ˜€. λ˜ν•œ μ œμ•ˆμ΄ 잘 μž‘λ™ν•œλ‹€λ©΄ λ¬Έμ„œ νŒ¨μΉ˜μ— κ°μ‚¬λ“œλ¦½λ‹ˆλ‹€.

같은 λ¬Έμ œκ°€ λ°œμƒν–ˆμŠ΅λ‹ˆλ‹€. 제 κ²½μš°μ—λŠ” SHOW_TOOLBAR_CALLBACK λ₯Ό μž¬μ •μ˜ν•˜μ—¬ $# DEBUG 값을 λ°˜ν™˜ν–ˆμŠ΅λ‹ˆλ‹€. ν•΄κ²° 방법은 django.conf.settings λ₯Ό κ°€μ Έμ˜€κ³  λŒ€μ‹  settings.DEBUG λ₯Ό λ°˜ν™˜ν•˜λŠ” κ²ƒμž…λ‹ˆλ‹€.

이에 λŒ€ν•œ μ—…λ°μ΄νŠΈκ°€ μžˆμŠ΅λ‹ˆκΉŒ?

λ‚˜λŠ” μ΄κ²ƒμ„ν•΄μ•Όν–ˆλ‹€ :

settings.py

TESTING_MODE = 'test' in sys.argv

urls.py

if settings.DEBUG or settings.TESTING_MODE:
    import debug_toolbar
    urlpatterns += [
        url(r'^__debug__/', include(debug_toolbar.urls)),
    ]

맀우 λ‹Ήν™©μŠ€λŸ¬μš΄ ν–‰λ™μž…λ‹ˆλ‹€. λ‹€λ₯Έ ν•΄κ²° 방법이 μžˆμ„ 수 μžˆμ§€λ§Œ μ§€κΈˆμ€ μ΄κ²ƒμœΌλ‘œ μΆ©λΆ„ν•©λ‹ˆλ‹€.

λ‚˜λŠ” SamMorrowDrums μ†”λ£¨μ…˜μ„ μ‹œλ„ν–ˆμ§€λ§Œ λ‚˜μ—κ²Œ νš¨κ³Όκ°€ μ—†μ—ˆμ§€λ§Œ 그의 아이디어λ₯Ό 기반으둜 ν•œ 이 μ‘°μ • 버전은 잘 μž‘λ™ν•©λ‹ˆλ‹€.

settings.py

import sys

DEBUG = True
TESTING_MODE = 'test' in sys.argv
DEV_MODE = DEBUG and not TESTING_MODE

if DEV_MODE:
    INSTALLED_APPS += [
        'debug_toolbar'
    ]
    MIDDLEWARE += ['debug_toolbar.middleware.DebugToolbarMiddleware', ]

    # DEBUG TOOLBAR SETTINGS:
    DEBUG_TOOLBAR_PANELS = [
        'debug_toolbar.panels.versions.VersionsPanel',
        'debug_toolbar.panels.timer.TimerPanel',
        'debug_toolbar.panels.settings.SettingsPanel',
        'debug_toolbar.panels.headers.HeadersPanel',
        'debug_toolbar.panels.request.RequestPanel',
        'debug_toolbar.panels.sql.SQLPanel',
        'debug_toolbar.panels.staticfiles.StaticFilesPanel',
        'debug_toolbar.panels.templates.TemplatesPanel',
        'debug_toolbar.panels.cache.CachePanel',
        'debug_toolbar.panels.signals.SignalsPanel',
        'debug_toolbar.panels.logging.LoggingPanel',
        'debug_toolbar.panels.redirects.RedirectsPanel',
    ]

    def show_toolbar(request):
        return True

    DEBUG_TOOLBAR_CONFIG = {
        'INTERCEPT_REDIRECT': False,
        'SHOW_TOOLBAR_CALLBACK': show_toolbar,
    }

urls.py

from django.conf import settings

if settings.DEV_MODE:
    import debug_toolbar
    urlpatterns += [
        path('__debug__/', include(debug_toolbar.urls)),
    ]

django-debug-toolbarλ₯Ό ν‘œμ‹œν•˜λŠ” κΈ°λ³Έ μ½œλ°±μ„ μž¬μ •μ˜ν•  μˆ˜λ„ μžˆμŠ΅λ‹ˆλ‹€.
settings.pyμ—μ„œ λ‹€μŒκ³Ό 같이 μ„€μ • ν•˜μ‹­μ‹œμ˜€.

INTERNAL_IPS = ['127.0.0.1']
DEBUG_TOOLBAR_CONFIG = {
    'SHOW_TOOLBAR_CALLBACK': lambda r: r.environ.get('SERVER_NAME', None) != 'testserver' and (r.META.get('REMOTE_ADDR', None) in INTERNAL_IPS)
}

... λ˜λŠ” "ν…ŒμŠ€νŠΈ μš”μ²­μž„"을 ν™•μΈν•˜λŠ” λ‹€λ₯Έ 방법

이것이 μ—¬μ „νžˆ λ¬Έμ œμΈμ§€ ν™•μΈν•˜κΈ° μœ„ν•΄ λˆ„κ΅°κ°€ 이것을 μž¬ν˜„ν•  수 μžˆμŠ΅λ‹ˆκΉŒ? λ‚˜λŠ” 그것을 μž¬ν˜„ν•˜μ§€ λͺ»ν–ˆμŠ΅λ‹ˆλ‹€.

이것이 μ—¬μ „νžˆ λ¬Έμ œμΈμ§€ ν™•μΈν•˜κΈ° μœ„ν•΄ λˆ„κ΅°κ°€ 이것을 μž¬ν˜„ν•  수 μžˆμŠ΅λ‹ˆκΉŒ? λ‚˜λŠ” 그것을 μž¬ν˜„ν•˜μ§€ λͺ»ν–ˆμŠ΅λ‹ˆλ‹€.

μ•ˆλ…•ν•˜μ„Έμš”, 저도 μ—¬μ „νžˆ 이 λ¬Έμ œμ— 직면해 μžˆμŠ΅λ‹ˆλ‹€. django-debug-toolbar==2.2 및 Django==2.1.8 μ‚¬μš©

이것은 μ•½κ°„ 였래된 django 버전 λ•Œλ¬ΈμΌ 수 μžˆμŠ΅λ‹ˆκΉŒ?
ViewλŠ” μ •μƒμ μœΌλ‘œ 호좜될 λ•Œ 잘 μž‘λ™ν•˜μ§€λ§Œ python manage.py test ν…ŒμŠ€νŠΈ 싀행을 ν˜ΈμΆœν•  λ•Œ λ°œμƒν•©λ‹ˆλ‹€.

django.request: ERROR: Internal Server Error: /order_platform/photo_import/
Traceback (most recent call last):
  File "/usr/local/lib/python3.6/site-packages/django/urls/base.py", line 75, in reverse
    extra, resolver = resolver.namespace_dict[ns]
KeyError: 'djdt'

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/usr/local/lib/python3.6/site-packages/django/core/handlers/exception.py", line 34, in inner
    response = get_response(request)
  File "/usr/local/lib/python3.6/site-packages/debug_toolbar/middleware.py", line 99, in __call__
    bits[-2] += toolbar.render_toolbar()
  File "/usr/local/lib/python3.6/site-packages/debug_toolbar/toolbar.py", line 69, in render_toolbar
    return render_to_string("debug_toolbar/base.html", context)
  File "/usr/local/lib/python3.6/site-packages/django/template/loader.py", line 62, in render_to_string
    return template.render(context, request)
  File "/usr/local/lib/python3.6/site-packages/django/template/backends/django.py", line 61, in render
    return self.template.render(context)
  File "/usr/local/lib/python3.6/site-packages/django/template/base.py", line 171, in render
    return self._render(context)
  File "/usr/local/lib/python3.6/site-packages/django/test/utils.py", line 96, in instrumented_test_render
    return self.nodelist.render(context)
  File "/usr/local/lib/python3.6/site-packages/django/template/base.py", line 937, in render
    bit = node.render_annotated(context)
  File "/usr/local/lib/python3.6/site-packages/django/template/base.py", line 904, in render_annotated
    return self.render(context)
  File "/usr/local/lib/python3.6/site-packages/django/template/defaulttags.py", line 309, in render
    return nodelist.render(context)
  File "/usr/local/lib/python3.6/site-packages/django/template/base.py", line 937, in render
    bit = node.render_annotated(context)
  File "/usr/local/lib/python3.6/site-packages/django/template/base.py", line 904, in render_annotated
    return self.render(context)
  File "/usr/local/lib/python3.6/site-packages/django/template/defaulttags.py", line 442, in render
    url = reverse(view_name, args=args, kwargs=kwargs, current_app=current_app)
  File "/usr/local/lib/python3.6/site-packages/django/urls/base.py", line 86, in reverse
    raise NoReverseMatch("%s is not a registered namespace" % key)
django.urls.exceptions.NoReverseMatch: 'djdt' is not a registered namespace

이것은 λ‚΄ settings.py μž…λ‹ˆλ‹€.

if DEBUG:
    ...
    INSTALLED_APPS += ["debug_toolbar"]
    # include as early as possible
    MIDDLEWARE = ["debug_toolbar.middleware.DebugToolbarMiddleware"] + MIDDLEWARE
    DEBUG_TOOLBAR_PANELS = [
        "ddt_request_history.panels.request_history.RequestHistoryPanel",
        "debug_toolbar.panels.versions.VersionsPanel",
        "debug_toolbar.panels.timer.TimerPanel",
        "debug_toolbar.panels.settings.SettingsPanel",
        "debug_toolbar.panels.headers.HeadersPanel",
        "debug_toolbar.panels.request.RequestPanel",
        "debug_toolbar.panels.sql.SQLPanel",
        "debug_toolbar.panels.staticfiles.StaticFilesPanel",
        "debug_toolbar.panels.templates.TemplatesPanel",
        "debug_toolbar.panels.cache.CachePanel",
        "debug_toolbar.panels.signals.SignalsPanel",
        "debug_toolbar.panels.logging.LoggingPanel",
        "debug_toolbar.panels.redirects.RedirectsPanel",
    ]
    INSTALLED_APPS += ["django_nose"]
    DEBUG_TOOLBAR_CONFIG = {"SHOW_TOOLBAR_CALLBACK": lambda request: True}
    TEST_RUNNER = "django_nose.NoseTestSuiteRunner"

@shydefoo ν™˜κ²½ λ³€μˆ˜λ₯Ό 톡해 ν…ŒμŠ€νŠΈ 쀑에 도ꡬ λͺ¨μŒμ„ ν¬ν•¨ν•˜μ§€ μ•Šλ„λ‘ μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ„ ꡬ성할 수 μžˆμŠ΅λ‹ˆλ‹€. 또 λ‹€λ₯Έ μ˜΅μ…˜μ€ DEBUG λ₯Ό False $ 둜 μ„€μ •ν•˜μ—¬ ν…ŒμŠ€νŠΈλ₯Ό μ‹€ν–‰ν•˜λŠ” κ²ƒμž…λ‹ˆλ‹€. ν•˜μ§€λ§Œ μ΄λŠ” μ—¬μ „νžˆ 도ꡬ λͺ¨μŒμ΄ μ„€μΉ˜λ˜μ§€ μ•Šλ„λ‘ μ œμ™Έν•œλ‹€κ³  κ°€μ •ν•©λ‹ˆλ‹€.

@tim-schilling λ„€, μ œκ°€ ν•œ μΌμž…λ‹ˆλ‹€. SHOW_TOOLBBAR_CALLBACK 이 문제인 것 κ°™μŠ΅λ‹ˆλ‹€.

이 νŽ˜μ΄μ§€κ°€ 도움이 λ˜μ—ˆλ‚˜μš”?
0 / 5 - 0 λ“±κΈ‰