2016-07-06 41 views
1

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

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

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

预先感谢您。

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

+0

这是django-cms术语。我想为搜索引擎索引数据,但是在搜索结果中显示的数据不在(网站)网页上显示,这是一个问题。 – Igor

回答

1

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) 

作为进一步的实例,我有经由“画廊”占位符加到一个图库插件。每个图库细节视图都提供了与同一页面关联的其他图库的链接;

# 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开发者编写的搜索应用。