【问题标题】:DjangoCMS: how to auto-add default plugins in placeholdersDjangoCMS:如何在占位符中自动添加默认插件
【发布时间】:2015-01-24 11:32:59
【问题描述】:

我的 DjangoCMS 模板中有一些占位符(例如,页眉、内容和页脚)。我想自动填充任何带有默认项的新创建页面:带有页眉插件的页眉占位符和带有页脚插件的页脚占位符。

怎么做?

【问题讨论】:

    标签: python django django-cms


    【解决方案1】:

    这可以使用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 有一个字段 body 允许 HTML 内容。

    【讨论】:

    • 是否可以使用值为 ForeignKey 的默认插件执行此操作?
    【解决方案2】:

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

    【讨论】:

      【解决方案3】:

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

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

      这里有一个例子让你更清楚:

      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
      

      然后您只需将类似 sn-p 的内容添加到您的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 !',
                          },
                      ]
                  },
              ],
          ...
      }
      

      无论如何,我希望这对寻找相同事物的人有所帮助(我假设 Adam Venturella 现在已经继续前进了)

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2018-05-05
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多