2013-12-22 6 views
11

django-debug-toolbarを私のdjangoアプリケーションで使用しようとしていて、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:問題はあなたではなく、それはTypeErrorする必要があり、非推奨の警告すべきではない(取得メッセージで説明されて

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

、それはおそらくdebug_toolbarのバグです):

SHOW_TOOLBAR_​​CALLBACKは現在、点線のパスです。文字列:呼び出し可能に呼び出し可能な、今it is a dotted pathにするために使用

SHOW_TOOLBAR_CALLBACK設定を設定し、あなたのDEBUG_TOOLBAR_​​CONFIGを更新します。あなたが引用したコードは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