在 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。
我正在使用 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。