首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Django CMS如何编程创建嵌套插件

Django CMS如何编程创建嵌套插件
EN

Stack Overflow用户
提问于 2015-01-14 07:04:03
回答 4查看 2K关注 0票数 3

我正在编写一个迁移脚本来将一个旧的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 )

代码语言:javascript
复制
            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的页面,所以我不能手动执行。

EN

回答 4

Stack Overflow用户

发布于 2015-05-20 15:02:07

抱歉,只是在这件事上保持一致。这在逻辑上比看起来复杂得多。我写了一篇关于这个的文章。

Django CMS以编程方式在插件中添加插件

一般来说,解决方案是模仿CMS的方式来做到这一点。

代码语言:javascript
复制
    # 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)

查找文章中的完整片段。希望这能帮助有类似问题的人。

票数 3
EN

Stack Overflow用户

发布于 2016-08-02 14:32:02

要添加嵌套插件,您需要这样做:

代码语言:javascript
复制
        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'
        )

这也适用于自定义插件。

票数 2
EN

Stack Overflow用户

发布于 2015-05-19 11:53:49

你试过保存你创建的链接插件吗?

代码语言:javascript
复制
plugin.link = Link(
            name='Link text',
            page_link=target_page,
            placeholder=placeholder,
        )

也许试着加入

代码语言:javascript
复制
plugin.link.save()

我希望是这样。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/27937448

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档