热门标签:
Q:

django-debug-toolbar与django-cms和Django1.3

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

"MpttMeta没有属性''"

我有一种感觉,这与Django CMS捆绑的Mptt应用程序有关,但我不确定,我已经在几个项目上看到了这一点,但我很惊讶我无法在Google中找到错误消息的直接命中,所以我想我会在这里发布。

我已经尝试使用最新版本的调试工具栏,也是开发分支,也是dcramer的叉子,但它没有区别。 我在Django1.3和Django CMS2.1.3上。

有什么想法吗?

谢谢!

原网址
A:

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

class MpttMeta:

class MpttMeta(object):

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

所有回答

共 3 条

author avatar

这可能是与Django1.3相关的任何问题。

Django CMS2.1.3仅支持1.2。X分支:http://docs.django-cms.org/en/2.1.3/getting_started/installation.html#requirements

Jonas Obrist,Django CMS dev说"也许是一个次要版本的 2.1将增加官方1.3支持"

author avatar

或者你可以把这个放进你的。... urls.py 例如。 不在settings.py 因为项目不会启动。

from publisher.mptt_support import MpttMeta
if not hasattr(MpttMeta, '__class__'):
    MpttMeta.__class__ = type
author avatar
Caught AttributeError while rendering: class MpttMeta has no attribute '__class__'

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

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工作。

相似问题