我正在编写一个迁移脚本来将一个旧的html网站解析为Django CMS页面。我需要的是了解如何编程嵌套插件。特别是在这种情况下,我需要将html < a>标记转换为CMS LinkPlugin对象,嵌套在文本中,由Django-CMS的标准ckeditor TextPlugin编辑。
如何以编程方式在Django CMS的其他插件中嵌套插件。在我的例子中,我需要在文本的TextPlugin中嵌套一个CMS链接插件。我知道如何解析文本。我不明白如何从嵌套CMS插件的角度来做它?我无法将我插入的Link插件对象实例和CMSPlugin对象实例互连到祖先TextPlugin中。
更多背景:
注意,我真的知道如何从UI的角度来做这件事。我需要在剧本里模仿这个。我已经将数据库转储到JSON中,并注意到其中有一些东西。
首先,我有一个CMSPlugin类实例,它被放置到页面占位符中。(这部分来源于CMS的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实例。稍后,我将在CMS中创建一个链接插件实例。问题是,我不知道如何正确地做这件事。
从UI的角度来看,CMS插件是添加嵌套的,但不包含真正的插件实例。因此,该占位符的Admin插件树将使用空的Link呈现。

CMSPlugins添加了链接 < Empty>。
我可以编辑这个创建的链接插件通过管理和添加一个文本和目标链接。如何通过编程实现这一点。比如在剧本里面?脚本必须执行1000 s的页面,所以我不能手动执行。
发布于 2015-05-20 15:02:07
抱歉,只是在这件事上保持一致。这在逻辑上比看起来复杂得多。我写了一篇关于这个的文章。
Django CMS以编程方式在插件中添加插件
一般来说,解决方案是模仿CMS的方式来做到这一点。
# Getting an site admin instance
admin_site = AdminSite()
instance, plugin_admin = plugin.get_plugin_instance(admin_site)
plugin_admin.cms_plugin_instance = plugin
plugin_admin.placeholder = plugin.placeholder
# Triggering the Django Admin add view with our request.
# That's how Django-CMS does this action itself.
response = plugin_admin.add_view(request)查找文章中的完整片段。希望这能帮助有类似问题的人。
发布于 2016-08-02 14:32:02
要添加嵌套插件,您需要这样做:
add_plugin(
placeholder=placeholder,
plugin_type='TextPlugin',
language=translation.get_language(),
)
target = placeholder.get_plugins().get(plugin_type='TextPlugin')
add_plugin(
placeholder=placeholder, #same placeholder as the parent plugin
plugin_type='LinkPlugin',
language=translation.get_language(),
target=target, #the parent plugin
#here comes the params from the selected plugin
name='Google',
url='http://www.google.com'
)这也适用于自定义插件。
发布于 2015-05-19 11:53:49
你试过保存你创建的链接插件吗?
plugin.link = Link(
name='Link text',
page_link=target_page,
placeholder=placeholder,
)也许试着加入
plugin.link.save()我希望是这样。
https://stackoverflow.com/questions/27937448
复制相似问题