带有django-cms和Django 1.3的django-debug-toolbar

|| 尝试同时使用django-debug-toolbar和django-cms时,我一直遇到错误。 \“ MpttMeta没有属性\'class \'\” 我感觉这与与Django CMS捆绑在一起的Mptt应用有关,但是我不确定,我已经在一些项目中看到了这一点,但是我很惊讶我无法在Google中找到错误消息的直接匹配,因此我认为我会在这里发布。 我尝试使用最新发布的版本的调试工具栏,develop分支和dcramer的fork,但这没什么区别。我使用的是Django 1.3和Django CMS 2.1.3。 有任何想法吗? 谢谢!     
已邀请:
可能是与Django 1.3相关的任何问题。 Django CMS 2.1.3仅支持1.2.X分支:http://docs.django-cms.org/zh/2.1.3/getting_started/installation.html#requirements Django CMS开发人员Jonas Obrist说:“也许是 2.1将添加官方1.3支持\“     
问题在于django-debug-toolbar期望MpttMeta类需要是一个'new style \'类,这是一个相当简单的补丁(django-cms / publisher / mptt_support.py中的第33行)。更改:
class MpttMeta:
class MpttMeta(object):
在Django-CMS 2.1.3中,它们仍然具有与Django-CMS捆绑在一起的自己的猴子补丁mptt。在下一版本的Django-CMS中,将不再捆绑其自己的mptt,而是依赖于独立开发的软件包。     
或者,您可以将其放在您的.... urls.py中。不在settings.py中,因为项目将无法启动。
from publisher.mptt_support import MpttMeta
if not hasattr(MpttMeta, \'__class__\'):
    MpttMeta.__class__ = type
    
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
显然这不是永久性的修复,但是它可以使您使用debug-toolbar + django-cms。     

要回复问题请先登录注册