Plone 有一个漂亮的搜索框,其网站具有类似“Google 建议”的功能。它甚至可以对上传的 PDF 等文档进行索引。有谁知道可以在 Django 站点中提供此类功能的模块吗?

有帮助吗?

解决方案

Plone 通过维护一个单独的索引属性元数据表(例如上次修改、创建者、标题等字段从内容对象复制到该表中)来实现其 LiveSearch 功能。然后,内容对象发送 ObjectAdded/ObjectModified/ObjectRemoved 事件,事件订阅者侦听这些事件并负责更新元数据表(在 Django 中,事件被称为信号)。然后有一个在固定 URL 上公开的浏览器视图,用于搜索元数据并返回适当的 LiveSearch HTML,最后每个 HTML 页面都会发送适当的 JavaScript 来处理自动完成 AJAX 功能,以查询此视图并将生成的 HTML 结果放入DOM。

如果您希望 LiveSearch 查询多个模型/内容类型,您可能需要发送自己的事件并让订阅者适当地处理它们。对于较小的数据集或较低流量的网站来说,这不是必需的,在这些网站中,对单个搜索执行多个查询的性能损失不是问题(或者您只想搜索单个内容类型),并且您可以执行多个查询来自您的视图的查询。

至于 JavaScript 方面,您可以自行构建或使用现有的 JavaScript 库。这在 JS 库中通常称为自动完成。对于初学者来说,有 YUI 自动完成和 Scriptaculous 自动完成,而且可能还有更多 JavaScript 自动完成实现。Plone 使用 KSS 作为其 JavaScript 库,如果要寻找示例代码,KSS livesearch 插件是一个很好的起点。

http://pypi.python.org/pypi/kss.plugin.livesearch

还有关于将 KSS 与 Django 一起使用的教程:

http://kssproject.org/docs/tutorial/kss-in-django-with-kss-django-application

KSS 非常好,因为它干净地将行为与客户端内容分开(无需编写 JavaScript),但 Scriptaculous 在概念上更简单一些,并且有更好的文档(http://github.com/madrobby/scriptaculous/wikis/ajax-autocompleter).

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top