django-debug-toolbar с django-cms и Django 1.3

Я продолжаю сталкиваться с ошибкой при попытке использовать django-debug-toolbar и django-cms вместе.

"У mpttMeta нет атрибута класс"

У меня есть ощущение, что это как-то связано с приложением Mptt в комплекте с Django CMS, но я не уверен, и я видел это в нескольких проектах, но я удивлен, что не могу найти прямой ответ на ошибку сообщение в Google, поэтому я подумал, что опубликую здесь.

Я пытался использовать последнюю выпущенную версию панели инструментов отладки, а также ветку разработки, а также вилку dcramer, но это не имеет никакого значения. Я использую Django 1.3 и Django CMS 2.1.3.

Любые идеи?

Спасибо!


person Ludo    schedule 14.04.2011    source источник


Ответы (4)


Это может быть любая проблема, связанная с Django 1.3.

Django CMS 2.1.3 поддерживает только ветку 1.2.X: http://docs.django-cms.org/en/2.1.3/getting_started/installation.html#requirements

Йонас Обрист, разработчик Django CMS, говорит "Возможно, несовершеннолетний версия 2.1 добавит официальную поддержку 1.3"

person Xaerxess    schedule 14.04.2011
comment
это связано не с Django 1.3, а с версией mptt, включенной в django-cms. См. ответ Джона Скотта - person Riccardo Galli; 06.07.2011
comment
Как я уже писал, это может быть проблемой, связанной с Django 1.3, и классы нового стиля - довольно старая функция Python. - person Xaerxess; 07.07.2011

Проблема в том, что django-debug-toolbar ожидает, что класс MpttMeta должен быть классом «нового стиля», что является довольно простым патчем (строка 33 в django-cms/publisher/mptt_support.py). Изменять:

class MpttMeta:

to

class MpttMeta(object):

В Django-CMS 2.1.3 у них все еще есть собственный mptt с обезьяньим исправлением, связанный с Django-CMS. В следующем выпуске Django-CMS больше не будет связывать собственный mptt и вместо этого будет полагаться на независимо разработанный пакет.

person John-Scott    schedule 28.06.2011

Или вы можете поместить это в свой .... urls.py например. Не в settings.py, потому что проект не запустится.

from publisher.mptt_support import MpttMeta
if not hasattr(MpttMeta, '__class__'):
    MpttMeta.__class__ = type
person VStoykov    schedule 04.01.2012

Caught AttributeError while rendering: class MpttMeta has no attribute '__class__'

Я полагаю, что это связано с тем, как класс MPTTMeta загружается в метакласс (MPTTModelBase), из-за чего он не имеет атрибута class.

Исправление monkeypatch заключается в том, чтобы обернуть оскорбительный оператор в django-debug-toolbar следующим образом:

try:
    text = "method %s on %s object" % (receiver.__name__, receiver.im_self.__class__.__name__)
except:
    text = "method %s on %s object" % (receiver.__name__, type(receiver.im_self).__name__)

Это немного изменяет вывод, чтобы стать

method finish_mptt_class on classobj object

Ясно, что это не постоянное исправление, но оно позволяет вам работать с панелью инструментов отладки + django-cms.

person c4urself    schedule 16.05.2011