在 DjangoCMS 中,我可以有一个使用 cmsplugins 的 HTMLField 吗?

In DjangoCMS Can I have an HTMLField which has use of the cmsplugins?

我正在使用 DjangoCMS 3.1 构建一个站点,混合使用带有字段和 DjangoCMS 占位符的传统 Django 模型。这在原则上很好,但它并不能真正为站点管理员提供干净的工作流程,因为他们必须在更传统的管理界面中编辑模型的一半,然后通过前端编辑器界面编辑占位符。因为我真的不需要完整的前端编辑界面来简化事情,所以我想将所有定义为 PlaceHolderField 的字段转换为 HTMLFields。

完成此操作后,我在管理界面的 CKEditor 中访问 CMSplugins 时遇到问题;适当的按钮出现在 CKEditor 中,但下拉菜单是空的:

这是我的(简化的)模型描述:

class Project(models.Model):
    start_date = models.DateField('Start Date', blank=True, null=True)
    end_date = models.DateField('End Date', blank=True, null=True)
    subtitle =  models.CharField('Sub Title', max_length=512, blank=True, null=True)
    contents = HTMLField('Contents')

管理员声明:

class ProjectAdmin(FrontendEditableAdminMixin, reversion.VersionAdmin):
    fieldsets = [
        (None,
            {'fields':
                [
                    'title',
                    'type',
                    'start_date',
                    'end_date',
                    'subtitle',
                    'summary',
                    'contents',
                ]
            }
        ),
        ('Meta Information',{
                'classes': ('collapse',),
                'fields':
                [
                    'slug',
                    'legacy_id',
                    'created_date',
                    'modified_date',
                ],
            }
        )
    ]

    frontend_editable_fields = (
        'title',
        'start_date',
        'end_date',
        'lead_image',
        'subtitle',
        'summary',
        'contents'
    )

Settings.py

CKEDITOR_SETTINGS = {
    'language': '{{ language }}',
    'toolbar_HTMLField':  [
        ['Undo', 'Redo'],
        ['cmsplugins', '-', 'ShowBlocks'],
        ['Format', 'Styles'],
        ['TextColor', 'BGColor', '-', 'PasteText', 'PasteFromWord'],
        ['Maximize', ''],
        '/',
        ['Bold', 'Italic', 'Underline', '-', 'Subscript', 'Superscript', '-', 'RemoveFormat'],
        ['NumberedList', 'BulletedList', 'Blockquote', '-', 'Table'],
        ['Source']
    ],
    'skin': 'moono',
}

我试过在 settings.py 中声明 CMS_PLACEHOLDER_CONF 以防万一:

CMS_PLACEHOLDER_CONF = {
    'contents': {
        'name' : 'Contents',
        'plugins': ['TextPlugin', 'PicturePlugin', 'VideoPlugin', 'LinkPlugin'],
        'text_only_plugins': ['LinkPlugin'],
        'default_plugins':[
            {
                'plugin_type':'TextPlugin',
                'values':{
                    'body':'<p></p>'
                },
            },
        ],
         'child_classes': {
            'TextPlugin': ['PicturePlugin', 'VideoPlugin', 'LinkPlugin'],
        },
        'parent_classes': {
            'LinkPlugin': ['TextPlugin'],
        },
    }
}

看源码应该不会影响,只有PlaceHolderFields的定义。我也尝试将 PlaceholderAdminMixin 添加到 admin class 声明中。

我通过 {% render_model project 'contents' %} 启动的模态对话框访问管理界面,所以在某种程度上它在 DjangoCMS 上下文中,但它没有使用完整的前端界面。

这可能吗?也就是说,我可以通过 Django 管理界面中的 CKEditor 访问 DjangoCMS 插件,而无需恢复使用 PlaceholderField/ 完整的前端编辑界面吗?

支持的方法是使用 PlaceholderField(您尝试使用 HTMLField

有关详细信息,请参阅 http://docs.django-cms.org/en/develop/how_to/placeholders.html