如何在Django CMS中向静态占位符添加插件

4 投票
1 回答
1608 浏览
提问于 2025-04-18 18:22

我刚开始使用Django-CMS中的静态占位符,想要创建一个“页脚”的静态占位符。大概是这样的:

static_placeholder = StaticPlaceholder(
    name=static_placeholder_code,
    code=static_placeholder_code,
    creation_method=StaticPlaceholder.CREATION_BY_CODE
)
static_placeholder.save()

我尝试用api.add_plugin添加一个文本插件,但遇到了错误

add_plugin(
    placeholder=static_placeholder,
    plugin_type='TextPlugin',
    language='en',
)

因为静态占位符不是占位符的实例,所以add_plugin无法使用。在add_plugin函数中:assert isinstance(placeholder, Placeholder)

那么,给这个静态占位符添加一个文本插件的最佳方法是什么呢?

1 个回答

4

StaticPlaceholder 是一个模型,它和 Placeholder 模型有两个外键关系,一个叫 draft,另一个叫 public。这两个关系都会给你一个 Placeholder 实例。

你可以直接使用:

add_plugin(
    placeholder=static_placeholder.draft,
    plugin_type='TextPlugin',
    language='en',
)

这样就可以了,但要记住,最好总是使用 draft,因为当你发布的时候,所有来自 draft 的插件都会被复制到 public 的占位符中。

最后,虽然不太确定你应用的具体情况,但要指出的是,当在模板中渲染 staticplaceholder 时,不需要事先创建它。你可以直接这样做:

{% load cms_tags %}

{% static_placeholder 'footer' %}

这样就会获取或创建 footer 的静态占位符。

撰写回答