DjangoCMS:如何在占位符中自动添加默认插件



我的DjangoCMS模板中有几个占位符(par示例,页眉,contetent和页脚)。我想使用默认项目自动填充任何新创建的页面:带有页眉插件的页眉占位符和带有页脚插件的页脚占位符。

怎么能做到呢?

这可以使用CMS_PLACEHOLDER_CONF设置来完成,特别是default_plugins选项:

CMS_PLACEHOLDER_CONF = {
    'footer': {
        'name': "Footer",
        'default_plugins':[
            {
                'plugin_type':'FooterPlugin',
                'values':{
                    'body':'<p>This is the footer</p>'
                },
            },
        ]
    },
}

这假定您的FooterPlugin具有允许 HTML 内容的字段body

还有一个提示:静态占位符适用于此目的。

这是对上面的亚当·万德拉问题(关于带有外键的插件)的回应,因为我只需要解决同样的问题......迟到总比没有好(也许)

在挖掘源代码后,我发现在添加名为 notify_on_autoadd 的默认插件后,您可以将一个钩子添加到您的CMSPlugin中。它的签名是notify_on_autoadd(self, request, conf)其中conf是包含plugin_typevalues等的字典......所以我在那里添加了我想要的其他外键作为新键(它在values键中不起作用,因为它作为字段值逐字传递以进行CMSPlugin,但您可以将其添加到根 ok)...那么在notify_on_autoadd我只是从这个conf像往常一样制作新条目.

这是和示例 ot 让它更清楚:

class Story(CMSPlugin):
    title = models.CharField(max_length=32)
    def notify_on_autoadd(self, request, conf):
        new_line_values = conf.get('new_line_values', [])
        for vals in new_line_values:
            line = Line(
                fmt=vals.get('fmt', '')
                text=vals.get('text', ''),
                story=self
            )
            line.save()
    def __str__(self):
        return self.title

class Line(models.Model):
    fmt = models.CharField(max_length=8)
    text = models.TextField()
    story = models.ForeignKey(Story, related_name='story')
    def __str__(self):
        return self.heading

然后,您只需将类似此代码段的内容添加到您的CMS_PLACEHOLDER_CONF中。

CMS_PLACEHOLDER_CONF = {
    ...
        'default_plugins': [
            {
                'plugin_type':  'StoryPlugin',
                'values': {
                    'title': 'My Story',
                },
                'new_line_values': [
                    {
                        'fmt': 'normal',
                        'text': 'Lorem ipsum dolor sit amet, consectetur adipiscing elit',
                    },
                    {
                        'fmt': 'bold',
                        'text': 'Everyone is sick of Lorem Ipsum !',
                    },
                ]
            },
        ],
    ...
}

无论如何,我希望这可以帮助寻找同样东西的人(我假设亚当·冒险现在已经开始了)

最新更新