1

django-debug-toolbar と django-cms を一緒に使用しようとすると、エラーが発生し続けます。

「MpttMeta には属性「クラス」がありません」

Django CMS にバンドルされている Mptt アプリと関係があるような気がしますが、よくわかりません。いくつかのプロジェクトでこれを見てきましたが、エラーの直接のヒットが見つからないことに驚いています。 Google のメッセージなので、ここに投稿しようと思いました。

デバッグ ツールバーの最新リリース バージョン、develop ブランチ、および 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 では、Django-CMS にバンドルされたモンキー パッチが適用された独自の mptt がまだあります。Django-CMS の次のリリースでは、独自の mptt をバンドルしなくなり、代わりに独自に開発されたパッケージに依存します。

于 2011-06-28T17:20:50.257 に答える
2

Django1.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、DjangoCMS開発者は「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

明らかに永続的な修正ではありませんが、debug-toolbar + django-cms が機能するようになります。

于 2011-05-16T13:29:18.390 に答える