4

django 1.3 で 2.2 django-cms を使用し、django 1.4 で 2.3 django-cms git リポジトリを使用しています。モデルに PlaceholderField を含めると、次のようになります。

##books/models.py
class Book(models.Model):
    ...
    description = cmsmodels.PlaceholderField('book_description', null=True, blank=True)

class BookCMSPluginModelItem(models.Model):
    t_book = models.ForeignKey(Book)
    ...

class BookCMSPluginModel(CMSPlugin):
    featured_books = models.ManyToManyField(BookCMSPluginModelItem)
    template = models.CharField(max_length=256, choices= settings.BOOKS_TEMPLATES, default=settings.BOOKS_TEMPLATES[0]);

CMS プラグインを次のようにします。

##books/cms_plugins.py
class BookCMSPlugin(CMSPluginBase):
    model = BookCMSPluginModel
    name = _("Books Plugin")
    
    def render(self, context, instance, placeholder):
        self.render_template = instance.template;
        context['instance'] = instance;
        return context

次に、ある時点でテンプレートで、次のことができることを発見しました。

{% for mitem in instance.featured_books.all %}
    <!-- ...... -->
<div>{% render_placeholder mitem.t_book.description %}</div>
{% endfor %}

しかし、フロントエンドエディターで新しいプラグインを追加すると、説明フィールドがプレースホルダーとして表示されますが、その上にカーソルを合わせると、プラグインを配置した外側のプレースホルダーがアクティブになり、内側を直接選択できませんプレースホルダー. SemanticEditor を使用してコンテンツを追加できるため、管理サイトでは非常にうまく機能します。 ただし、フロントエンドでは、ユーザーが内部のプレースホルダーを追加または編集できないように見える JavaScript にイライラする問題があります。

ここで素晴らしい django- cmsドキュメントに従っていることに注意してください特別に設計されたページで、残念ながらカスタム django-cms プラグインのテンプレートを使用していません。

4

2 に答える 2

2

GitHub のこのスレッドで、django-cms 開発者の 1 人が、Django CMS 2.2 にはプラグインインプラグイン アーキテクチャがないと言っています。

最新の開発ブランチで試してみましたが、現在は機能しています。

于 2014-04-10T11:18:01.330 に答える