django-debug-toolbar с django-cms и Django 1.3 - PullRequest
1 голос
/ 14 апреля 2011

Я постоянно получаю сообщение об ошибке при попытке использовать django-debug-toolbar и django-cms вместе.

"MpttMeta не имеет атрибута" class '"

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

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

Есть идеи?

Спасибо!

Ответы [ 4 ]

3 голосов
/ 28 июня 2011

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

class MpttMeta:

до

class MpttMeta(object):

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

2 голосов
/ 14 апреля 2011

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

Django CMS 2.1.3 поддерживает только ветку 1.2.X: http://docs.django -cms.org / ru / 2.1.3 / getting_started /Установка. HTML # требования

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

1 голос
/ 04 января 2012

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

from publisher.mptt_support import MpttMeta
if not hasattr(MpttMeta, '__class__'):
    MpttMeta.__class__ = type
0 голосов
/ 16 мая 2011
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.

...