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

Posted

技术标签:

【中文标题】从祖先继承的 Django CMS 模板不识别占位符【英文标题】:Django CMS template inheriting from ancestor not recognizing placeholder 【发布时间】:2016-01-04 21:13:13 【问题描述】:

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

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

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

App Hook 页面之前覆盖此块以隐藏内容占位符。现在,我需要启用这个占位符,所以我删除了覆盖并得到了欢迎:

在 apphook 应用程序中找不到“内容”占位符。请改用静态占位符。

我试过了:

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

% block content %
    % placeholder 'new_content' %
% endblock %

保持继承不变并调用super:

% block content %
     block.super 
% endblock %

删除页面,重新添加,设置应用挂钩并发布。

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

这不太理想。我可以做些什么来解决这个问题?

【问题讨论】:

placeholder 在应用挂钩页面中不起作用。如果您正在使用应用挂钩模板,则需要使用 static_placeholder @marksweb 你能指出我的文档吗?因为我在应用程序挂钩页面上还有其他带有占位符的模板,效果很好。 如果我在CMS_TEMPLATES 中添加对应用程序挂钩页面的引用,它就可以正常工作。很奇怪。 啊,也许将它添加到CMS_TEMPLATES 使它工作。我找不到我确定我以前见过的文档。您能否确认一下,您是否尝试在您的应用挂钩模板中显示来自继承模板的相同占位符内容? 好吧,我会被诅咒的 :) 我想知道为什么将它添加到 CMS_TEMPLATES 似乎可以解决该声明?那好吧。如果您将其添加为答案,我会接受。 【参考方案1】:

placeholder 标记必须用于直接与 CMS 页面关联的页面。如果您的模板是通过 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 页面,该页面在相应的DetailView 中呈现占位符字段。

【讨论】:

以上是关于从祖先继承的 Django CMS 模板不识别占位符的主要内容,如果未能解决你的问题,请参考以下文章

截断 Django CMS 占位符

模板块内的 Django CMS 占位符不显示

“渲染占位符”未出现在 django CMS 模板中

显示相同占位符内容的 Django-CMS apphook 模板

在不同的占位符/模板上以不同的方式呈现 Django-CMS 插件

Django CMS 管理模板页面中的占位符