1

尝试同时使用 django-debug-toolbar 和 django-cms 时,我一直遇到错误。

“MpttMeta 没有属性‘’”

我觉得这与与 Django CMS 捆绑的 Mptt 应用程序有关,但我不确定,我在几个项目中看到过这种情况,但我很惊讶我找不到直接命中的错误谷歌的消息,所以我想我会在这里发帖。

我尝试过使用最新发布的调试工具栏版本、开发分支以及 dcramer 的分支,但这并没有什么区别。我在 Django 1.3 和 Django CMS 2.1.3 上。

有任何想法吗?

谢谢!

4

4 回答 4

3

问题是 django-debug-toolbar 期望 MpttMeta 类需要是一个“新样式”类,这是一个相当简单的补丁(django-cms/publisher/mptt_support.py 中的第 33 行)。改变:

class MpttMeta:

class MpttMeta(object):

在 Django-CMS 2.1.3 中,他们仍然有自己的猴子补丁 mptt 与 Django-CMS 捆绑在一起。在下一个版本的 Django-CMS 将不再捆绑自己的 mptt,而是依赖于独立开发的包。

于 2011-06-28T17:20:50.257 回答
2

这可能是与 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

Jonas Obrist,Django CMS 开发人员说“也许 2.1 的次要版本将添加官方 1.3 支持”

于 2011-04-14T17:35:09.130 回答
1

或者,您可以将其放入您的 .... urls.py 中。不在 settings.py 中,因为项目不会启动。

from publisher.mptt_support import MpttMeta
if not hasattr(MpttMeta, '__class__'):
    MpttMeta.__class__ = type
于 2012-01-04T14:13:02.670 回答
0
Caught AttributeError while rendering: class MpttMeta has no attribute '__class__'

我相信这与将 MPTTMeta 类加载到元类 (MPTTModelBase) 中的方式有​​关,使其没有属性。

猴子补丁修复是将违规语句包装在 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 工作。

于 2011-05-16T13:29:18.390 回答