我有一个简单的问题。我想知道是否可以在django-cms
中定义子插件的限制数量。我的插件有子插件,但我想将子插件的数量限制为最多2.可以在cms_plugins.py
添加一些配置吗?无需添加表单并手动验证它?
我将此添加到settings.py
:
CMS_PLACEHOLDER_CONF = {
'Ipp_Article_Sidebar': {
'plugins': ['ArticlesParentCMSPlugin', 'ArticlesChildCMSPlugin'],
'name': gettext("Right Side Content"),
'limits': {
'ArticlesParentCMSPlugin': 1,
'ArticlesChildCMSPlugin': 2
}
},
}
我的占位符属于模型:
sidebar = PlaceholderField('ipp_article_sidebar',
related_name='IPP_ARTICLE_SIDEBAR')
但我仍然可以添加2个以上的孩子。
答案 0 :(得分:0)
目前,在Django CMS中无法对嵌套插件进行此操作。
我需要类似的东西,并通过覆盖模板快速解决方法。我在Github上添加了对类似问题的反应:https://github.com/divio/django-cms/issues/5102#issuecomment-278303995
只需将max_children = <number>
添加到Plugin
课程,然后在模板文件夹dragitem.html
中创建一个新的templates/cms/toolbar/
模板,即可覆盖现有的Django CMS模板。见下面的差异:
当达到最大子女数时,这很好地禁用了+图标。
--- env/lib/python3.5/site-packages/cms/templates/cms/toolbar/dragitem.html 2016-09-15 12:06:26.132803200 +0200
+++ templates/cms/toolbar/dragitem.html 2017-02-08 12:26:59.343312100 +0100
@@ -9,6 +9,17 @@
{% if plugin.child_plugin_instances %} cms-dragitem-collapsable{% endif %}">
{% language request.toolbar.toolbar_language %}
{% if not disabled_child %}
+ {% with max_children=plugin.get_plugin_instance.1.max_children child_count=plugin.child_plugin_instances|length %}
+ {% if max_children %}
+ <div class="cms-submenu-btn cms-submenu-add cms-btn
+ {% if child_count >= max_children %} cms-btn-disabled{% endif %}">
+ {% if child_count >= max_children %}
+ <span class="cms-hover-tooltip" data-cms-tooltip="{% trans "You cannot add plugins to this plugin." %}"></span>
+ {% else %}
+ <span class="cms-hover-tooltip cms-hover-tooltip-left cms-hover-tooltip-delay" data-cms-tooltip="{% trans "Add plugin" %}"></span>
+ {% endif %}
+ </div>
+ {% else %}
<div class="cms-submenu-btn cms-submenu-add cms-btn
{% if not allow_children %} cms-btn-disabled{% endif %}">
{% if not allow_children %}
@@ -17,6 +28,8 @@
<span class="cms-hover-tooltip cms-hover-tooltip-left cms-hover-tooltip-delay" data-cms-tooltip="{% trans "Add plugin" %}"></span>
{% endif %}
</div>
+ {% endif %}
+ {% endwith %}
<div class="cms-submenu-btn cms-submenu-edit cms-btn" data-rel="edit">
<span class="cms-hover-tooltip cms-hover-tooltip-left cms-hover-tooltip-delay" data-cms-tooltip="{% trans "Edit" %}"></span>
</div>