Django中类似Plone的搜索框?
Plone的网站上有一个漂亮的搜索框,带有" Google推荐"之类的功能。它甚至可以为上传的文档(如PDF)编制索引。有谁知道可以在Django网站中提供这种功能的模块吗?
解决方案
回答
Plone通过维护带有索引属性的单独的元数据表来实现其LiveSearch功能(将最后修改的字段,创建者,标题等字段从内容对象复制到该表中)。然后,内容对象发送ObjectAdded / ObjectModified / ObjectRemoved事件,事件订阅者侦听这些事件并负责更新元数据表(在Django中,事件称为信号)。然后,在固定网址处显示了一个浏览器视图,该浏览器搜索元数据并返回适当的LiveSearch HTML,最后,向每个HTML页面发送适当的JavaScript以处理自动完成AJAX功能,以查询该视图并将结果HTML结果放入DOM。
如果希望LiveSearch查询多个模型/内容类型,则可能需要发送自己的事件,并让订阅者适当地处理它们。对于较小的数据集或者访问量较小的网站,这不是必需的,因为对于单个搜索执行多个查询不会造成性能损失(或者我们只想搜索一个内容类型),而我们可以执行多个视图中的查询。
至于JavaScript方面,我们可以自己动手或者使用现有的JavaScript库。通常在JS库中称为自动完成。对于初学者来说,有YUI自动完成功能和Scriptaculous自动完成功能,并且可能还有更多的JavaScript自动完成功能实现。 Plone的JavaScript库使用KSS,如果要查找示例代码,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)。