Django-CMS:仅在顶级插件中使用get_position_in_placeholder?

时间:2015-12-07 17:21:39

标签: django django-cms

我刚刚发现,可以通过django-cms模板(thanks to this question)中的instance.get_position_in_placeholder在占位符标记中获取插件的位置。

但似乎如果这些插件有子插件,那么它们也会被计入该位置。例如:

placeholder
  -- plugin  # pos: 1
    -- child_plugin # pos: 2
    -- child_plugin # pos: 3
  -- plugin # pos: 4
    -- child_plugin # pos: 5
  -- plugin # pos: 6

我正在寻找的是一个计数器,它只计算作为占位符的直接子节点的插件。例如:

placeholder
  -- plugin  # pos: 1
    -- child_plugin # ignored
    -- child_plugin # ignored
  -- plugin # pos: 2
    -- child_plugin # ignored
  -- plugin # pos: 3

我使用占位符标记来渲染插件:

{% placeholder general_content %}

使用{% render_plugin plugin %}呈现子插件。

django-cms版本是3.1.3。

以下是DOM中不需要的行为的截图(2和4是子插件):

enter image description here

django-cms模板中是否有这样的方法或属性?

1 个答案:

答案 0 :(得分:1)

这很奇怪,正如人们所期望的那样:

placeholder
  -- plugin_with_children # pos: 1
    -- child_plugin # pos: 1
    -- child_plugin # pos: 2
  -- plugin_with_children # pos: 2
    -- child_plugin # pos: 1
  -- plugin # pos: 3

我可以通过django-cms 3.1.3和3.2确认这对我有用,如上所示。那么,这可能是child_plugin定义的问题?获得正确位置的我的子插件要么在TextPlugin中呈现,要么在forloop中呈现,就像这样(在plugin_with_children的模板中):

{% for plugin in instance.child_plugin_instances %}
    {% render_plugin plugin %}
{% endfor %}

我怀疑你的孩子不是真正的孩子? ; - )

如果它们是:有一个管理命令,修复了旧的MPTT插件/页面树的问题(你是否从3.0更新?),也许错误就在那里。 “位置”位于数据库中,因此您可能需要直接检查数据库。此外,重新添加内容可能有所帮助(只是为了确保,观看数据库等...)。