有什么方法可以检查插件是否在页面中的任何位置可见(已发布)? 我有多个页面,每个页面都有不同的模板。 这些模板具有不同的静态占位符,这些占位符具有不同的插件。
问题是模板上存在一些未激活的插件,因此我不想在查询中获取这些插件。
是否有一种方法可以仅显示已发布页面上可见的插件? 同样的问题:有没有办法只显示激活模板上出现的插件?
提前谢谢您。
编辑:我想这样做是因为我正在尝试填充搜索数据库,即索引。
最佳答案
Page 模型上有一个名为 is_published
的方法;
def is_published(self, language, force_reload=False):
return self.get_title_obj(language, False, force_reload=force_reload).published
您可以找到任何给定 CMSPlugin
对象通过其占位符附加到的页面。
所以在你的插件过滤器上你可以这样做;
draft_objects = MyPlugin.objects.filter(placeholder__page__publisher_is_draft=True)
live_objects = MyPlugin.objects.filter(placeholder__page__publisher_is_draft=False)
作为进一步的示例,我通过“图库”占位符添加了一个图像库插件。每个图库详细信息 View 都提供与同一页面关联的其他图片库的链接;
# Filter the list of other galleries so that we don't get galleries
# attached to other pages.
more_galleries = [
g for g in galleries if (
g.placeholder.slot == u'gallery' and
unicode(g.placeholder.page.id) == page_id
)
]
我不完全确定“激活的模板”是什么意思,但如果您的意思是页面上正在使用的模板,则必须先过滤给定模板名称的页面,然后再根据页面。听起来很复杂(大型 SQL 查询)并且您需要解释您想要什么/为什么要这样做。
编辑
如果您想要搜索 - 请查看 Aldryn Search这是一个由 django CMS 开发人员编写的搜索应用程序。
关于django - 查找具有多个模板和静态占位符的可见插件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38222981/