2015-01-30 2 views
0

То, что я пытаюсь сделать, это предлагать функции поиска на веб-странице, где все данные отображаются при загрузке страницы. Набор данных не очень большой (думаю, < 500 элементов), поэтому было бы очень удобно использовать некоторые функции поиска, которые не требуют обновления страницы (или любых запросов на этот счет). Я просмотрел несколько интересных Javascript-библиотек (суммирован в this answer), и особенно Fuse.js и Lunr.js выглядят очень подходящими для моего сценария.Использование алгоритма поиска Javascript в переменной контекста Django

Проблема в том, что я не знаю, как применять эти библиотеки, которые, как представляется, ищут исключительно JSON - в контексте, переданном Django. Я только поцарапал поверхность функциональности Django, потому что я только начал работать над ней несколько дней назад, поэтому простите меня, если я пропущу что-то очевидное. Спасибо!

ответ

2

Вам просто нужно вывести JSON в свой шаблон. Вы можете либо передать его прямо из своего вида через json.dumps(), либо вручную перебирать данные в своем шаблоне, чтобы создать JSON. Первое было бы предпочтительнее.

Таким образом, используя пример предохранителя, ваш взгляд будет делать:

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> 
0

В то время как Даниил (в комментариях), безусловно, правильно, что рассказал мне, как добавить JSON в контексте - я, вероятно, должен был сформулировать вопрос по-другому. Но я отвлекся.

После некоторой дополнительной работы я теперь генерирую правильный JSON из иерархии объектов. Этот JSON передается через контекст и затем используется вместе с Mustache.js для генерации HTML. Я не мог понять способ передачи данных, поскольку JSON и также используют язык шаблонов Django для итерации через JSON. При приближении к этому с другого направления я не мог найти способ конвертировать обычный контекст Django (например, контекст с var.objects.all()) в JSON на стороне клиента (из-за какой-то глупой чепухи с одиночными кавычками ..)

Несмотря на то, что создание HTML с помощью Mustache.js было не так уж плохо, потому что это позволило мне легко манипулировать страницей с результатами поиска, генерируемыми алгоритмом поиска (в моем случае Fuse.js). Надеемся, что производительность будет в полном объеме в производстве, но она, безусловно, выглядит очень многообещающей!

Смежные вопросы