2013-12-22 5 views
11

을 내 django 응용 프로그램과 함께 사용하려고하고 django v1.5에서 작동했습니다. 그러나, 나는 시스템을 장고 v1.6으로 마이그레이션하려고하는데, 페이지를로드하려고하면 다음과 같은 오류가 발생합니다.Django v1.6 디버그 도구 모음 미들웨어 오류 번호 .rsplit()

python manage.py runserver 
Validating models... 

0 errors found 
December 21, 2013 - 22:53:18 
Django version 1.6.1, using settings 'MySite.settings' 
Starting development server at http://XXX.XXX.XXX.XXX:XXXX/ 
Quit the server with CONTROL-C. 
Internal Server Error:/
Traceback (most recent call last): 
    File "/home/user/django-env/local/lib/python2.7/site-packages/django/core/handlers/base.py", line 90, in get_response 
response = middleware_method(request) 
    File "/home/user/django-env/local/lib/python2.7/site-packages/debug_toolbar/middleware.py", line 45, in process_request 
mod_path, func_name = func_path.rsplit('.', 1) 
AttributeError: 'function' object has no attribute 'rsplit' 
[21/Dec/2013 22:53:21] "GET/HTTP/1.1" 500 58172 

소스는이 메모를 가지고 있지만, 나는 그들이 정확하게 (import_by_path을) 무슨 뜻인지 잘 모르겠어요 :

def process_request(self, request): 
    # Decide whether the toolbar is active for this request. 
    func_path = dt_settings.CONFIG['SHOW_TOOLBAR_CALLBACK'] 
    # Replace this with import_by_path in Django >= 1.6. 
    mod_path, func_name = func_path.rsplit('.', 1) 
    show_toolbar = getattr(import_module(mod_path), func_name) 
    if not show_toolbar(request): 
     return 

을 또한, 우리는 그것에있어. 이 메시지가 무엇을 의미하는지 아는 것이 있습니까?

/home/user/django-env/local/lib/python2.7/site-packages/debug_toolbar/settings.py:68: DeprecationWarning: SHOW_TOOLBAR_CALLBACK is now a dotted path. Update your DEBUG_TOOLBAR_CONFIG setting. 
    "DEBUG_TOOLBAR_CONFIG setting.", DeprecationWarning) 

내 settings.py :

def custom_show_toolbar(request): 
    return True # Always show toolbar, for example purposes only. 

DEBUG_TOOLBAR_CONFIG = { 
    'INTERCEPT_REDIRECTS': False, 
    'SHOW_TOOLBAR_CALLBACK': custom_show_toolbar, 
    'INSERT_BEFORE': 'div', 
    'ENABLE_STACKTRACES' : True, 
} 

답변

22

문제는 오히려 그것이 TypeError해야하는 중단 경고 안, 즉 버그가 debug_toolbar에 아마하는 (GET 메시지에 의해 설명되어 있습니다) :

이제 SHOW_TOOLBAR_CALLBACK은 점선으로 표시됩니다. 문자열 : 호출 가능한에

호출 가능한이 될하는 데 사용되는 SHOW_TOOLBAR_CALLBACK 설정,하지만 지금 it is a dotted path을 설정하여 DEBUG_TOOLBAR_CONFIG를 업데이트합니다. 인용 한 코드가 rsplit의 값인 SHOW_TOOLBAR_CALLBACK을 시도하지만 rsplit 함수 객체가 없기 때문에 오류가 발생합니다.

이 문제를 해결하려면 콜백을 다른 파이썬 파일 (예 : your_site/toolbar_stuff.py)에 넣고 설정을 'SHOW_TOOLBAR_CALLBACK': 'your_site.toolbar_stuff.custom_show_toolbar'으로 조정하십시오. 셸에서 시도해 보면 사전에 작동하는지 테스트 할 수 있습니다.

from your_site.toolbar_stuff import custom_show_toolbar 

작동하는 경우 새 설정도 작동합니다.

+3

음 ... 실제로 게시하기 전에 제안한 것들 중 일부를 시도해 보았습니다. 설명서를 살펴 봤지만 명확하지 않았습니다. 오류가 명확하지 않으며 코드의 주석 오해의 소지가있었습니다. 또한 MySite.settings.custom_show_toolbar에 점선으로 된 경로를 사용하려고 시도했지만 작동하지 않았습니다. 마지막 해결책은 점선으로 된 경로를 사용하는 것이지만 문자열로 캡슐화하는 것입니다. 예 : 'SHOW_TOOLBAR_CALLBACK': 'MySite.settings.custom_show_toolbar''. 또는이 기능을 외부 설정 파일로 옮길 수는 있지만 설정을 유지했습니다. 피드백을 주셔서 감사합니다. 올바른 해결책을 찾았습니다. – James