μλ νμΈμ, debugtoolbarμ 3λ²μ μλμ .. 3λ²μ μ€ν¨
λ¨Όμ 보μ¬μ€ μ μλ€λ©΄.
2λ
νμλ λ§μ°¬κ°μ§,
μ΄λ²μλ μ€λ₯κ° λ°μν©λλ€.
/μμ NoReverseMatch
'djdt'λ λ±λ‘λ λ€μμ€νμ΄μ€κ° μλλλ€.
λ΄κ° ν΄μΌ νλ λλ‘ μ€μ λ° URLμμ λͺ¨λ μμ μ μννμ΅λλ€.
λ¬Έμ λ 14νμ μμ΅λλ€.
13 <div id="djDebug" class="djdt-hidden" dir="ltr"
14 data-store-id="{{ toolbar.store_id }}" data-render-panel-url="{% url 'djdt:render_panel' %}"
15 {{ toolbar.config.ROOT_TAG_EXTRA_ATTRS|safe }}>
μ₯κ³ λ²μ 1.9 1.10, 1.10.04
PIP3μ λλ²κ·Έ ν¨λ 1.6
μ€μ :
INSTALLED_APPSκ°
['django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sites',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
'django_hosts',
'ckeditor',
'django_user_agents',
'λλ²κ·Έ_λꡬ λͺ¨μ',
'μ±μ€.μ½μ΄',
'μ±μ€.λΈλ‘κ·Έ']
λ΄λΆ_IPS
('127.0.0.1', '192.168.1.41')
MIDDLEWARE_CLASSES
('django_hosts.middleware.HostsRequestMiddleware',
'debug_toolbar.middleware.DebugToolbarλ―Έλ€μ¨μ΄',
'django.contrib.sessions.middleware.SessionMiddleware',
'django.contrib.auth.middleware.AuthenticationMiddleware',
'django.contrib.messages.middleware.MessageMiddleware',
'django.middleware.clickjacking.XFrameOptionsMiddleware',
'django.middleware.common.CommonMiddleware',
'django.middleware.csrf.CsrfViewMiddleware',
'django.middleware.locale.LocaleMiddleware',
'django_hosts.middleware.HostsResponseMiddleware',
'django_user_agents.middleware.UserAgentMiddleware')
λλ²κ·Έκ° TRUEλ‘ μ€μ λμ΄ μμ΅λλ€.
μ λ°.. λμμ£ΌμΈμ. 3λ λμ λλ²κΉ μ μν μ΅κ³ μ λꡬ μ€ νλλ₯Ό μ¬μ©ν μ μλ€λ κ²μ΄ μ€λ§μ€λ½μ΅λλ€...
μ΄ μ€λ₯λ URLμ μ¬λ°λ₯΄κ² ꡬμ±νμ§ μμμμ μλ―Έν©λλ€.
_CFG.DEBUG = μ°Έ
if _CFG.DEBUG:
import debug_toolbar
urlpatterns += [
url(r'^__debug__/', include(debug_toolbar.urls)),
url(r'^site_media/(?P<path>.*)$', serve, {'document_root': settings.MEDIA_ROOT, 'show_indexes': True}),
url(r'^static/(?P<path>.*)$', serve, {'document_root': settings.STATIC_ROOT, 'show_indexes': True}),
]
λμμ£ΌμΈμ? :(
μ’μ 보μΈλ€(λ΄ μκ°μ). μ 체 URLconf νμΌμ 보μ¬μ£Όμκ² μ΅λκΉ? /site_media/
λ λ‘컬μμ μλν©λκΉ? _CFG
μ(λ) 무μμ
λκΉ? κ²μν μ½λκ° ROOT_URLCONF
μ μΌλΆμ
λκΉ, μλλ©΄ μ΄λ―Έ λ€λ₯Έ λ€μμ€νμ΄μ€ μμ μμ΅λκΉ?
μ, λ£¨νΈ URLμ μΌλΆμμ΅λλ€.
from django.conf.urls.i18n import i18n_patterns
from django.conf.urls import url, include
from django.conf import settings
from django.contrib import admin
from django.views.decorators.cache import cache_page
from django.views.generic.base import RedirectView
from django.views.generic import *
from django.views.static import serve
from django.views.i18n import javascript_catalog
from django.utils.translation import ugettext_lazy as _
from ..core.views import *
import config as _CFG
admin.autodiscover()
urlpatterns = [
url(r'^jsi18n/$', javascript_catalog),
url(r'^jsi18n/(?P<packages>\S+?)/$', javascript_catalog),
url(r'^i18n/', include('django.conf.urls.i18n')),
url(r'^admin/', include(admin.site.urls)),
url(r'^ckeditor/', include('ckeditor_uploader.urls')),
]
urlpatterns += [
url(r'^lang/(?P<lang>[\w\-]+)$', set_lang),
url(r'^error-(?P<ID>\d+)$', errors),
url(r'^login/$', login),
url(r'^logout/$', logout),
url(r'^favicon\.ico$', RedirectView.as_view(permanent=True, url='static/favicon.ico')),
url(r'^favicon\.png$', RedirectView.as_view(permanent=True, url='static/favicon.png')),
url(r'^prev\.png$', RedirectView.as_view(permanent=True, url='static/icons/prev.png')),
url(r'^robots\.txt$', RedirectView.as_view(permanent=True, url='static/robots.txt')),
url(r'^sitemap\.xml$', RedirectView.as_view(permanent=True, url='static/sitemap.xml')),
]
if _CFG.REGISTRABLE:
urlpatterns += [
url(r'^register/$', views.register),
url(r'^activate', views.activate),
]
if _CFG.RESETABLE:
urlpatterns += [
url(r'^resetpass/$', views.reset_password, {'typ' : 'resetpass'}),
url(r'^resetpass2/$', views.reset_password, {'typ' : 'resetpass2'}),
]
if _CFG.DEBUG:
import debug_toolbar
urlpatterns += [
url(r'^__debug__/', include(debug_toolbar.urls)),
url(r'^site_media/(?P<path>.*)$', serve, {'document_root': settings.MEDIA_ROOT, 'show_indexes': True}),
url(r'^static/(?P<path>.*)$', serve, {'document_root': settings.STATIC_ROOT, 'show_indexes': True}),
]
handler404 = my404
handler500 = my404
if len(_CFG.APP_LIST) == 0:
exec(open('./apps/www/urls.py').read())
cfgλ νλ‘μ νΈμμ μ¬μ©νλ μΆκ° κ΅¬μ± νμΌμ λλ€. μμ κ°λ§ ν¬ν¨ν©λλ€.
@NomadDemon μ΄ λ¬Έμ μ μ§μ μ΄ μμ΅λκΉ?
λ€, μμλμ΅λλ€.
λ¨Όμ ꡬμ±μ λͺ κ°μ§ λ¬Έμ κ° μμκ³ νμ prod ꡬμ±μ΄ DEBUG = Falseμ ν¨κ» μ¬μ©λμμ΅λλ€. - κ³ μ
κ·Έλ° λ€μ λꡬ λͺ¨μμ΄ νμλμ§ μλ λ¬Έμ κ° λ°μνμ΅λλ€.
HTTP λμ SOCK μ΅μ
κ³Ό ν¨κ» gunicornμ μ¬μ©ν λ remote_addrμ΄ μ λ¬λμ§ μμ΅λλ€. λ΄ μμ μ "λλ²κΉ
μ¬μ©μλ₯Ό μν μ ν¨μ± κ²μ¬κΈ°"λ₯Ό μλμΌλ‘ μ¬μ©ν΄μΌ νμ΅λλ€.
λ λ²μ§Έ λΆλΆμ λ€λ₯Έ μ¬μ©μμκ² μ μ©ν μ μμ΅λλ€.
λΉ λ₯Έ μλ΅μ κ°μ¬ν©λλ€.
μ¬μ€, λλ κ°μ μ€λ₯λ₯Ό μ»μμ§λ§ λ€λ₯Έ μ΄μ λ‘. λ‘ μΈν΄ λ°μνμ΅λλ€.
λ΄ μ±μ url.py μμ λΆμ¬λ£μ debug-toolbar url κ²½λ‘,
νλ‘μ νΈμ url.py μμ λ£λ λμ
2017λ 3μ 25μΌ μ€ν 12μ 3λΆμ "NomadDemon" [email protected] μ΄ μμ±νμ΅λλ€.
λ€, μμλμ΅λλ€.
λ¨Όμ ꡬμ±μ λͺ κ°μ§ λ¬Έμ κ° μμκ³ νμ prod ꡬμ±μ΄ λ€μκ³Ό ν¨κ» μ¬μ©λμμ΅λλ€.
λλ²κ·Έ = κ±°μ§. - κ³ μ κ·Έλ° λ€μ λꡬ λͺ¨μμ΄ νμλμ§ μλ λ¬Έμ κ° λ°μνμ΅λλ€.
HTTP λμ SOCK μ΅μ κ³Ό ν¨κ» gunicornμ μ¬μ©ν λ remote_addrμ
ν΅κ³Ό. λ΄ μμ μ "λλ²κΉ μ¬μ©μλ₯Ό μν μ ν¨μ± κ²μ¬κΈ°"λ₯Ό μλμΌλ‘ μ¬μ©ν΄μΌ νμ΅λλ€.λ λ²μ§Έ λΆλΆμ λ€λ₯Έ μ¬μ©μμκ² μ μ©ν μ μμ΅λλ€.
β
λΉμ μ΄ λκΈμ λ¬μκΈ° λλ¬Έμ μ΄κ²μ λ°λ κ²μ λλ€.
μ΄ μ΄λ©μΌμ μ§μ λ΅μ₯νκ³ GitHubμμ νμΈνμΈμ.
https://github.com/jazzband/django-debug-toolbar/issues/911#issuecomment-289207638 ,
λλ μ€λ λ μμκ±°
https://github.com/notifications/unsubscribe-auth/AECBuNt3Zeul4JCyIhkb74hoRCbnCs80ks5rpQKggaJpZM4Lwdtd
.
κ°μ¬ ν΄μ. μ΄ λ¬Έμ λ κ·Έλ λ«μ μ μλ€κ³ μκ°ν©λλ€. λλ²κ·Έ λꡬ λͺ¨μμ΄ μ΄μ λ μ¬λ λͺ¨λμκ² μλνλ€λ μμμ λ£κ² λμ΄ κΈ°μ©λλ€!
κ°μ₯ μ μ©ν λκΈ
λΉ λ₯Έ μλ΅μ κ°μ¬ν©λλ€.
μ¬μ€, λλ κ°μ μ€λ₯λ₯Ό μ»μμ§λ§ λ€λ₯Έ μ΄μ λ‘. λ‘ μΈν΄ λ°μνμ΅λλ€.
λ΄ μ±μ url.py μμ λΆμ¬λ£μ debug-toolbar url κ²½λ‘,
νλ‘μ νΈμ url.py μμ λ£λ λμ
2017λ 3μ 25μΌ μ€ν 12μ 3λΆμ "NomadDemon" [email protected] μ΄ μμ±νμ΅λλ€.