Django-CMS - 全局占位符?

6

有没有办法在我的基本模板中创建全局占位符?我需要它在每个页面上都相同(横幅列表)。我应该怎么做?

3个回答

11

我通常在我的CMS中创建一个未发布的页面,但其中包含我想在其他地方使用的占位符(页脚/标题等)。

创建一个新的模板 extra_placeholders.html

{% extends "base.html" %}
{% load cms_tags %}

{% block content %}
    {% placeholder "Banner-List" %}
{% endblock %}

将其添加到您的设置中:

CMS_TEMPLATES = (
    ('my/path/extra_placeholders.html', 'Extra Placeholder Page'),
    ...
)

现在去管理员界面创建带有所需插件的占位符。然后转到基础模板(*base.html可能是)并将此内容添加到您希望占位符出现的任何位置:

{% load cms_tags %}
...
{% show_placeholder "Banner-List" "extra_placeholders" %}

文档中有更多相关信息


编辑

如@José L. Patiño在评论中提到,此解决方案仅适用于使用django-cms< 3.0的用户。对于更新版本,您可以直接使用static_placeholder模板标签。


我做得非常相似,但我使用主页作为保存全局占位符的地方。谢谢。 - tunarob
2
请注意,为了使 show_placeholder 标签正常工作,您的“额外占位符页面”必须在“高级设置”部分下将其 ID 设置为“extra_placeholders”。它无法直接从 slug 中推断出来... - Cerin
问题在于extra_placeholders页面中的占位符在前端界面的编辑模式下没有发布。必须进入管理员界面打开该页面并从那里发布页面。这对最终的内容编辑者来说非常令人困惑。有什么建议吗? - toto_tico
我发布了一个相关问题 - toto_tico
3
适用于 Django CMS 3.0 版本之前的良好解决方案。对于更新的 3 版本,它已在 "static-placeholder" 模板标签中实现。 https://django-cms.readthedocs.org/en/latest/advanced/templatetags.html#static-placeholder - José L. Patiño

7

1
这应该成为接受的答案,因为当前接受的答案不再必要。 - Llanilek

1
您可以使用以下方法为所有页面创建全局占位符。
  1. 在基础页面上创建一个占位符。{% Placeholder "footer"%}
  2. 通过Django CMS将占位符的内容设置为主页
  3. 然后为每个占位符页面显示相同的内容,添加 {% show_placeholder "footer" "home"%},这意味着从主页显示新创建的页脚占位符。
  4. 这将在使用该模板的所有页面的主页上显示现有页脚占位符的全部内容。
  5. 但是对于主页,将显示两个页脚,请使用CSS进行修改以隐藏主占位符。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接