可以在django-cms中限制嵌套插件的数量吗?

时间:2016-08-02 16:24:06

标签: python django django-cms

我有一个简单的问题。我想知道是否可以在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个以上的孩子。

1 个答案:

答案 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>