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

标签 django django-cms

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

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

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

提前谢谢您。

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

最佳答案

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/

相关文章:

python - 在 Webfaction 上部署 Django 应用程序

django - 使用 Heroku 的 Django 部署中缺少静态文件 list 条目

python - Django on Heroku dumpdata 输出不完整

python - 编写了一个从现有插件创建 Django-CMS 插件的命令

python - 从浏览器运行 Python 应用程序

django - 使用pip重新安装需求文件

django - Aldryn 形式的替代品(Django-CMS)

css - Django CMS 菜单,如何只为 parent 设置一个类(class)?

django - 是否可以在非 CMS 应用程序中显示 Django-CMS 菜单?

python - Django 意外的 IntegrityError 与 PostgreSQL