我刚刚发现,可以通过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是子插件):
django-cms模板中是否有这样的方法或属性?
答案 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更新?),也许错误就在那里。 “位置”位于数据库中,因此您可能需要直接检查数据库。此外,重新添加内容可能有所帮助(只是为了确保,观看数据库等...)。