2013-12-22 61 views
11

我想用我的django應用程序使用django-debug-toolbar,它適用於django v1.5。但是,我試圖將系統遷移到django 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 ):

SHOW_TOOLBAR_​​CALLBACK現在是虛線路徑。更新您的DEBUG_TOOLBAR_​​CONFIG設置

曾經是一個可調用的SHOW_TOOLBAR_CALLBACK設置,但現在it is a dotted path到調用的:一個字符串。您所引用的代碼嘗試rsplit的值爲SHOW_TOOLBAR_CALLBACK,但因爲您不能rsplit函數對象,所以會出現錯誤。

要解決此問題,請將回調放入另一個python文件中,例如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