Django CMS模板继承自祖先不识别占位符

时间:2015-10-07 14:55:29

标签: django django-cms

我正在使用Django CMS 3.0.13。我有一个连接到App Hook的页面,它从最近的祖先继承了它的模板。

祖先模板未连接到App Hook,并且有一个占位符:

{# ancestor template #}
{% block content %}
    {% placeholder 'content' %}
{% endblock %}

App Hook页面之前已覆盖此块以隐藏内容占位符。现在,我需要启用此占位符,因此我删除了覆盖,并接受了:

  在apphook应用程序中找不到

“content”占位符。请改用静态占位符。

我试过了:

  • 重新添加覆盖并更改占位符的名称:

    {% block content %}
        {% placeholder 'new_content' %}
    {% endblock %}
    
  • 保留继承相同并调用super:

    {% block content %}
        {{ block.super }}
    {% endblock %}
    
  • 删除页面,重新添加,设置应用程序挂钩和发布。

所有这些导致相同的错误。我发现解决此问题的唯一方法是将App Hook的页面添加到CMS_TEMPLATES

这不太理想。我该怎么做才能解决这个问题?

1 个答案:

答案 0 :(得分:1)

必须在直接绑定到CMS页面的页面上使用placeholder标记。如果您的模板是通过django应用呈现的,则需要使用static_placeholder

static_placeholder也可用于在模板之间重复使用相同的内容,例如一个页脚。

关于静态占位符的文档,包括它们在CMS页面中的使用而非外部应用程序; http://django-cms.readthedocs.org/en/latest/how_to/templates.html#static-placeholder

此外,如果您尚未对此进行过探讨,请查看应用中占位符周围的文档。 http://django-cms.readthedocs.org/en/latest/how_to/placeholders.html

在您的应用中使用PlaceholderField可能会导致一些很酷的应用挂钩,这些挂钩可能会占用您所有的CMS插件。具体来说,我创建了一个新闻应用程序,其中包含允许您通过工具栏添加/编辑内容的应用程序,然后为所有对象提供ListView页面,这些对象将呈现相应{{1}中的占位符字段}。