簡體   English   中英

在Django上下文變量上使用Javascript搜索算法

[英]Using a Javascript search algorithm on a Django context variable

我想做的是在網頁上提供搜索功能,該網頁在加載頁面時會顯示所有數據。 數據集不是很大(認為少於500個項目),因此提供一些不需要頁面刷新(或與此有關的任何請求)的搜索功能將非常易於使用。 我看過一些有趣的Javascript庫(在此答案中總結),尤其是Fuse.jsLunr.js看起來非常適合我的情況。

問題是我不知道如何將這些庫(似乎僅通過JSON搜索)應用於Django傳遞的上下文。 我只是刮擦了Django功能的表面,因為我只是幾天前才開始研究它,所以如果我缺少明顯的東西,請原諒我。 謝謝!

您只需要在模板中輸出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>

盡管Daniel(在評論中)肯定是正確的,告訴我如何將JSON添加到上下文中-我可能應該用不同的措詞來表達問題。 但是我離題了。

經過更多工作之后,我現在從對象層次結構中生成正確的JSON。 該JSON通過上下文傳遞,然后與Mustache.js一起使用以生成HTML。 我想不出一種將數據作為JSON傳遞使用Django的模板語言來遍歷JSON的方法。 當從另一個方向進行處理時,我無法找出一種將常規Django上下文(例如,具有var.objects.all()的上下文)轉換為客戶端上的JSON的方法(因為使用單引號..)

盡管如此,用Mustache.js生成HTML畢竟還不錯,因為這使我可以輕松地使用搜索算法(在我的情況下為Fuse.js)生成的搜索結果來操縱頁面。 希望在生產中性能會很好,但是看起來非常有希望!

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM