3

1 つの PlaceholderField を持つ独自のモデルを持つ django-cms のプラグインを作成しました。モデル管理者用の PlaceholderAdmin を追加すると、管理サイトで次のようになります。

Exception Type: TemplateSyntaxError
Exception Value:    
Caught TypeError while rendering: <lambda>() takes exactly 1 argument (2 given)
Exception Location: <blablapath>/python2.6/site-packages/cms/forms/widgets.py in render, line 199

私は解決策を探していましたが、django-cms の例で urls.py のパスのコメントを外さないと実行できないいくつかの問題しか見つかりませんでした。問題は、django-cms の URL が有効であるためにはどのような条件が必要かということです。何か案は?解決策はありますか?誰かが以前にこの問題を抱えていましたか?

4

3 に答える 3

6

PlaceholderAdminFieldこの問題は、管理クラスで をサブクラス化していない場合に発生します。

例えば:

from cms.admin.placeholderadmin import PlaceholderAdmin
from cms.models.fields import PlaceholderField

class MyModel(models.Model):
    name = models.CharField(max_length=100)
    sidebar = PlaceholderField('sidebar')

class MyAdmin(PlaceholderAdmin):
    """ Put your usual admin stuff here. If you use fieldset,
    include the sidebar as its own tuple """
    fieldsets = (
        (None, {
            'fields': ('name',),
        }),

        ('Sidebar', {
            'classes': ('plugin-holder', 'plugin-holder-nopage'),
            'fields': ('sidebar',)
        }),
    )
admin.site.register(MyModel, MyAdmin)
于 2011-03-29T15:00:21.897 に答える
0

Ok。私は私のために問題を解決しました。私はまだ何が起こっているのかわかりませんが、おそらく私の答えはあなたがそれを理解するのに役立つでしょう;)。私は方法を使用しました:

def formfield_for_dbfield(self, db_field, **kwargs):
    ...

これは、1つのテキストフィールドをTinyMCEエディターに置き換えました。メソッド全体を削除すると、問題はなくなりました。後で時間があれば、もう少し深く掘り下げてみるかもしれません。それが唯一の問題だとはまだ確信していません。コードからのテキストプラグインでプレースホルダーを埋めたので、それもデータで何かになるかもしれないという予感があります。

それが何らかの形で役立つことを願っています。

于 2011-03-31T15:32:02.990 に答える
0

これは Django-CMS のバグのようです。私はそれを使用したことはありませんが、コードを見ると、デフォルトのフォームフィールドがPlaceholderField単一の引数(クエリセット)を取るラムダを作成することは明らかですが、そのフォームフィールドのrender関数は2つの引数(リクエストとリクエスト)でラムダを呼び出しますクエリセット。

おそらくこれを修正する最善の方法は、正しいラムダを返すようにメソッドPlaceholderFieldを再定義する独自のサブクラスを定義することです。formfield

class FixedPlaceholderField(PlaceholderField):
    def formfield(self, **kwargs):
        return self.formfield_for_admin(None, lambda request, qs: qs, **kwargs)

代わりにモデルでこのフィールドを使用してください。

これで問題が解決する場合は、おそらく Django-CMS でバグを報告する価値があります。

于 2011-03-17T13:23:01.740 に答える