【问题标题】:Using a Javascript search algorithm on a Django context variable在 Django 上下文变量上使用 Javascript 搜索算法
【发布时间】:2015-03-29 21:11:29
【问题描述】:

我正在尝试在加载页面时显示所有数据的网页上提供搜索功能。数据集不是很大(想想 this answer),尤其是 Fuse.jsLunr.js 看起来非常适合我的场景。

问题是我不知道如何将这些库(似乎专门通过 JSON 搜索)应用到 Django 传递的上下文中。我只触及了 Django 功能的表面,因为我几天前才开始研究它,所以如果我遗漏了一些明显的东西,请原谅我。谢谢!

【问题讨论】:

    标签: javascript django fuse.js


    【解决方案1】:

    虽然 Daniel(在 cmets 中)告诉我如何将 JSON 添加到上下文中当然是正确的 - 我可能应该以不同的方式表达这个问题。但我离题了。

    经过更多工作,我现在从对象层次结构中生成正确的 JSON。此 JSON 通过上下文传递,然后与 Mustache.js 一起使用以生成 HTML。我想不出一种将数据作为 JSON 传递的方法 并且 还使用 Django 的模板语言来遍历 JSON。当从另一个方向处理这个问题时,我想不出一种方法来在客户端将常规 Django 上下文(例如带有var.objects.all() 的上下文)转换为 JSON(因为单引号的一些愚蠢的废话......)

    尽管如此,使用 Mustache.js 生成 HTML 并不是那么糟糕,因为这让我可以轻松地使用搜索算法(在我的例子中是 Fuse.js)生成的搜索结果来操作页面。希望性能在生产中会正常,但它看起来确实很有希望!

    【讨论】:

      【解决方案2】:

      您只需在模板中输出 JSON。您可以通过json.dumps() 直接从您的视图传递它,或者手动遍历模板中的数据以创建 JSON。第一个会更好。

      因此,使用 Fuse 示例,您的视图可以:

      def my_view(request):
          data = ... get data from wherever ...
          return render(request, 'template.html', {"data": json.dumps(data)})
      

      和模板:

      <script type="text/javascript">
          var data = {{ json_data }}
          var options = ...
          var f = new Fuse(data, options)
      </script>
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2012-11-29
        • 2017-09-04
        • 1970-01-01
        • 2019-03-23
        • 2014-08-15
        • 2019-07-28
        • 1970-01-01
        • 2017-08-17
        相关资源
        最近更新 更多