如何使用post_publish信号发布show_placeholder引用的相关页面?

时间:2014-03-22 09:25:12

标签: django django-cms

我正在使用show_placeholder在我的网站上显示“全局”内容。例如,我在侧边栏中使用的Widget。我做了类似于this other question中给出的建议。我在管理员中创建了一个模板extra_placeholders.html和一个页面(带有返回ID“extra-placeholders”),使用extra_placeholders.html来存储占位符。它永远不会显示在前端,但我可以使用{% show_placeholder "my_placeholder" "extra-placeholders" %}

访问它的占位符

我需要解决的一个警告很好。假设我使用Django-CMS的前端“版本模式”来编辑占位符。它的工作原理是我可以修改内容并保存它。

但是,不会自动发布

我理解原因。占位符实际上属于另一个页面(“extra-placeholders”)。因此,当我点击前端的“发布”时,我会保存我看到的页面,但不保存通过my_placeholder关联的页面。

因此,我希望每次保存任何其他页面时都使用信号来保存“额外占位符”页面。我发现有this signal但是如何使用它来发布我的占位符页面?

1 个答案:

答案 0 :(得分:1)

您实际上想要将信号连接到CMSPlugin,而不是Page

这样的事情(未经测试!)可能有效:

def signal_handler(instance, **kwargs):
    if not isinstance(instance, CMSPlugin):
        return
    page = Page.objects.get(reverse_id='extra-placeholders', publisher_is_draft = True)
    if page.placeholders.filter(pk=instance.placeholder_id).exists():
        page.publish()

post_save.connect(signal_handler)