Я пишу сценарий миграции для анализа старого веб-сайта html на страницах CMS Django. Мне нужно понять, как программно вставлять плагины. В частном случае мне нужно иметь html < a> теги, преобразованные в объекты CMS LinkPlugin, вложенные внутри текста, которые редактируются стандартным ckeditor TextPlugin из Django-CMS.Django CMS как создавать вложенные плагины программно
Как программно гнездо плагинов внутри других плагинов Django CMS. В моем случае мне нужно вложить в текст плагин CMS Link внутри TextPlugin. Я знаю, как разбирать текст. Я не понимаю, как это сделать из перспективы вложенных плагинов CMS? Я не могу соединиться с экземпляром объекта плагина Link CMS и экземпляром объекта CMSPlugin, который я вставляю в предка TextPlugin.
Больше контекст:
Примечание Я действительно знаю, как сделать это с точки зрения пользовательского интерфейса. Мне нужно подражать этому в скрипте. Я сбросил базу данных в JSON и заметил, что там есть определенные вещи.
Сначала у меня есть экземпляр класса CMSPlugin, который помещается в заполнитель страницы. (Sotle этой части из placeholderadmin.py К)
position = CMSPlugin.objects.filter(language=lang, parent=parent).count()
plugin = CMSPlugin(
language='en',
position=position,
plugin_type=plugin_type,
placeholder=placeholder,
)
plugin.insert_at(parent, position='last-child', save=False)
plugin.save()
# ?????
plugin.link = Link(
name='Link text',
page_link=target_page,
placeholder=placeholder,
)
plugin.save()
Это создает вложенную плагину в соответствующем заполнителе и присоединяет его в текстовом плагин. Однако добавляется пустой экземпляр LinkPlugin. Позднее я создаю экземпляр плагина Link в CMS. Дело в том, что я не знаю, как это сделать должным образом.
С точки зрения пользовательского интерфейса плагин CMS добавлен вложенным, но не содержит реального экземпляра плагина. SO дерево плагинов Admin для этого заполнителя визуализируется пустым плагином Link. CMSPlugins добавлены Ссылка< Пустой>.
Я могу отредактировать этот созданный плагин Link через admin и добавить текст и целевую ссылку. Как это сделать программно. Например. внутри скрипта? Сценарий должен делать 1000 страниц, поэтому я не могу сделать это вручную
Я знаю, что это старый ответ, но я хотел бы указать, что это решение больше не будет работать с djangoCMS 3.3.0. Лучший способ добавить плагины программно - использовать cms api (cms.api). – Paulo