【问题标题】:django-debug-toolbar with django-cms and Django 1.3带有 django-cms 和 Django 1.3 的 django-debug-toolbar
【发布时间】:2011-08-05 10:20:18
【问题描述】:

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

"MpttMeta 没有属性 'class'"

我感觉这与与 Django CMS 捆绑的 Mptt 应用程序有关,但我不确定,我在一些项目中看到过这种情况,但我很惊讶我找不到直接命中对于 Google 中的错误消息,所以我想我会在这里发布。

我尝试过使用最新发布的调试工具栏版本、develop 分支和 dcramer 的 fork,但没有任何区别。我在 Django 1.3 和 Django CMS 2.1.3 上。

有什么想法吗?

谢谢!

【问题讨论】:

    标签: django templates django-cms django-debug-toolbar


    【解决方案1】:

    问题是 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,而是依赖于独立开发的包。

    【讨论】:

      【解决方案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

      Django CMS 开发人员 Jonas Obrist 说 "Maybe a minor version of 2.1 will add official 1.3 support"

      【讨论】:

      • 它与 Django 1.3 无关,但与 django-cms 中包含的 mptt 版本有关。见约翰斯科特的回复
      • 正如我所写 - 它可能是与 Django 1.3 和 new style classes are quite old python 功能相关的问题。
      【解决方案3】:

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

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

      【讨论】:

        【解决方案4】:
        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 正常工作。

        【讨论】:

          猜你喜欢
          • 2012-05-18
          • 2021-07-15
          • 2022-08-13
          • 2016-04-08
          • 2013-01-15
          • 2014-08-28
          • 2015-05-13
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多