【发布时间】:2016-05-04 20:25:41
【问题描述】:
创建自定义插件后,网站上的每个placeholder 都可以使用它。如果我希望它们仅在特定的 static_placeholder 上可用并被排除在其余部分之外怎么办?
我知道documentation 告诉我如何在每个占位符上手动包含每个插件,但不告诉我如何从中排除插件。目前可以吗?
我正在开发 Django CMS 3.1.2
【问题讨论】:
标签: django django-cms
创建自定义插件后,网站上的每个placeholder 都可以使用它。如果我希望它们仅在特定的 static_placeholder 上可用并被排除在其余部分之外怎么办?
我知道documentation 告诉我如何在每个占位符上手动包含每个插件,但不告诉我如何从中排除插件。目前可以吗?
我正在开发 Django CMS 3.1.2
【问题讨论】:
标签: django django-cms
ojii 回答的后续:
虽然目前正在批准合并(见#5412),但yakky描述的方法如下:
要实现黑名单,在
CMS_PLACEHOLDER_CONF[None]['excluded_plugins']列表中添加要加入黑名单的插件
谢谢@yakky :)
编辑:更多信息来自Issue #5412:
有时全局配置会让事情变得更好/ 更简单
@ojii 建议了一个 for 级别结构,例如(在增加 优先顺序)
CMS_PLACEHOLDER_CONF[None] (global)
CMS_PLACEHOLDER_CONF['template'](如果给出了模板)
CMS_PLACEHOLDER_CONF['placeholder']
CMS_PLACEHOLDER_CONF['template placeholder'](如果给出了模板)
EDIT 2 在 Django CMS 3.4.0 上尝试了这些新配置,并且运行良好
CMS_PLACEHOLDER_CONF = {
'About': {
'excluded_plugins': ['CMSArticlePlugin', 'FormPlugin'],
},
'Contact': {
'excluded_plugins': ['CMSArticlePlugin'],
},
'Editions': {
'excluded_plugins': ['CMSArticlePlugin', 'FormPlugin'],
},
'Involved': {
'excluded_plugins': ['CMSArticlePlugin', 'FormPlugin'],
},
'Gallery': {
'excluded_plugins': ['CMSArticlePlugin', 'FormPlugin'],
},
'News': {
'excluded_plugins': ['FormPlugin'],
},
}
干得好,Django CMS 团队!
【讨论】:
目前,您只能将插件列入白名单,而不能将它们列入黑名单。这意味着现在,您必须在所有其他占位符上指定所有插件(自定义插件除外)的列表(注意您可以使用模板作为键来选择模板中的所有占位符),并为您的静态定义列表包含您的自定义插件的占位符。
在django CMS Issue Tracker 上提出这个问题可能也是值得的,以便在未来的版本中找到更好的解决方案。
【讨论】: