Я использую django-cms 2.2 в django 1.3, а также репозиторий git django-cms 2.3 в django 1.4, и я замечаю, что если я включу 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 здесь: http://docs.django-cms.org/en/latest/extending_cms/placeholders.html, но этот сайт решает проблему только в контексте отображения модели на специально разработанной странице, к сожалению, не используя шаблон для собственный плагин django-cms.