Автозаполнение jQueryUI с URL в качестве источника (я использую Django) - PullRequest
4 голосов
/ 16 февраля 2011

Я использую веб-инфраструктуру Django для базы данных, генерации страниц и т. Д.

jQueryUI / javascript сторона кода

Я хочу использовать jQueryUIвиджет автозаполнения , так как мой набор данных будет содержать около 1000 записей, которые я хотел запросить в базе данных.По приведенной выше ссылке утверждается, что вы можете просто предоставить URL-адрес, который возвращает данные JSON:

Автозаполнение можно настроить для работы с различными источниками данных, просто указав параметр источника.Источником данных может быть:

* an Array with local data
* a String, specifying a URL
* a Callback

Я взял пример по умолчанию с веб-сайта, который работает в моей системе.

Однако, если я изменюсьследующее:

    $( "#tags" ).autocomplete({
        source: availableTags,
    });

до

    $( "#tags" ).autocomplete({
        source: "/search/", // url that provides JSON data
    });

функция автозаполнения вообще не работает.

Я пытался заставить URL действительно возвращать ошибку (чтобы увидеть, использует ли он его) и вводить полный URL http://localhost:8000/search/, ничего не работает.

Джанго часть кода

В url.py

...
    (r'^search/$', 'search'),
...

В views.py

from django.http import HttpRequest, HttpResponse
from django.utils import simplejson 
...
def search(request):
    HttpResponse(simplejson.dumps(["hello", "world"]))
    # Will implement proper suggestions when it works.

Должно быть, что-то не так с моим кодом, и я был бы очень признателен за любую помощь, которую вы можете предложить:)

РЕДАКТИРОВАТЬ РЕШЕНИЕ:

Благодаря @Thierry понял, что раньше не было оператора return, добавил, что теперь я выгляжу так:

def search(request):
    output = ["hello", "world"]
    return HttpResponse(simplejson.dumps(output))

И это на самом деле работает!

(Кажется, это действительно мелкие ошибки, которые тратят большую часть моего времени, grrr)

Ответы [ 2 ]

2 голосов
/ 16 февраля 2011

Я возвращаю свой ajax-ответ следующим образом:

def search(request):
    output = ["hello", "world"]
    return HttpResponse(output, mimetype="application/javascript")

Если вы обращаетесь к URL http://localhost:8000/search/, вы должны увидеть результат. Как только вы увидите вывод, автозаполнение должно работать.

1 голос
/ 06 мая 2015

Есть некоторые изменения в API сериализации json в более поздних версиях

  • Для Django 1.6 используйте

    import json
    from django.http import HttpResponse
    ....
    return HttpResponse(json.dumps(my_data_dictionary))
    
  • Для django 1.7+ сделайте это как здесь

...