关于django:查找具有多个模板和静态占位符的可见插件

Find visible plugins with multiple templates and static placeholders

有什么方法可以检查插件是否在页面中的任何位置可见(已发布)?
我有多个页面,每个页面都有不同的模板。
这些模板有不同的静态占位符,它们有不同的插件。

问题是模板上存在一些未激活的插件,因此我不想在查询中获取这些插件。

有没有办法只显示在已发布页面上可见的插件?
同样的问题:有没有办法只显示激活模板上出现的插件?

提前谢谢你。

编辑:我想这样做是因为我正在尝试填充搜索数据库,即索引。


Page 模型上有一个方法叫做 is_published;

1
2
def is_published(self, language, force_reload=False):
    return self.get_title_obj(language, False, force_reload=force_reload).published

您可以通过它的占位符找到任何给定 CMSPlugin 对象附加到的页面。

所以在你的插件过滤器上你可以这样做;

1
2
draft_objects = MyPlugin.objects.filter(placeholder__page__publisher_is_draft=True)
live_objects = MyPlugin.objects.filter(placeholder__page__publisher_is_draft=False)

作为进一步的例子,我有一个通过 \\'gallery\\' 占位符添加的图片库插件。每个图库详细视图都提供指向与同一页面关联的其他图片库的链接;

1
2
3
4
5
6
7
8
# 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 查询)