Django v1.6 debug-toolbar Ошибка промежуточного ПО Нет .rsplit()

Я пытаюсь использовать django-debug-toolbar с моим приложением django, и он работал для django v1.5. Тем не менее, я пытаюсь перенести систему на django v1.6, и при попытке загрузить любую страницу возникает следующая ошибка.

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)

Мои настройки .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,
}

Ответ 1

Проблема описывается сообщением, которое вы получаете (это не должно быть предупреждением об устаревании, скорее это должно быть TypeError, вероятно, ошибка в debug_toolbar):

SHOW_TOOLBAR_CALLBACK теперь является пунктирным путем. Обновите настройку DEBUG_TOOLBAR_CONFIG

Параметр SHOW_TOOLBAR_CALLBACK используется как вызываемый, но теперь это пунктирный путь к вызываемому: строка. Код, который вы цитируете, пытается 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

Если это работает, ваша новая настройка также должна работать.