【问题标题】:Plone-like search box in Django?Django中类似Plone的搜索框?
【发布时间】:2010-09-09 05:58:21
【问题描述】:

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

【问题讨论】:

    标签: django search


    【解决方案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)。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-12-29
      • 1970-01-01
      相关资源
      最近更新 更多