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 プラグインのテンプレートを使用していません。