Plone有一个漂亮的搜索框,其网站具有“Google建议”功能。它甚至索引上传的文档,如PDF。有没有人知道可以在Django站点中提供这种功能的模块?
答案 0 :(得分:1)
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
关于在Django中使用KSS的教程:
http://kssproject.org/docs/tutorial/kss-in-django-with-kss-django-application
KSS非常好用,因为它干净地将行为与客户端上的内容分开(无需编写JavaScript),但Scriptaculous在概念上稍微简单一点,并且有更好的文档(http://github.com/madrobby/scriptaculous/wikis/ajax-autocompleter)。