28 окт. 2009 г.

Django: AutoComplete widget.

Год назад я писал о виджете авто дополнения ввода. Тогда я везде старался использовать YUI. Сегодня столкнулся с необходимостью снова прикручивать подобный виджет, но использовать YUI ещё раз мне ужасно не хочется. Нужно будет тащить за ним несколько js файлов, в которых я мало что понимаю (dependency configurator особо не добавляет понимания), кроме того, наверняка есть другие более изящные решения.

Ну во-первых, на djangosnippets.org есть примеры jQuery Autocomplete и YUI Autocomplete (о котором я ничего не знал, когда писал свой вариант), есть и другие: http://www.djangosnippets.org/tags/autocomplete/.

Во-вторых, есть wiki-страница на djangoproject.com AutoCompleteSolutions, на которой перечислено несколько решений данной проблемы. Особо радует дата появления последней ссылки - 2009-09-15. Здесь же есть ссылка на первый YUI-Django-AutoComplete 2006 года (я тогда про django в принципе ничего не слышал).

После просмотра большей части вариантов я остановился на http://bitbucket.org/tyrion/django-autocomplete/, так как виджет в данном случае останется сторонним приложением, которому не нужно будет прописывать отдельные view для получения каждой новой порции данных. Здесь используются конструкции вида:


...

from autocomplete.views import autocomplete





autocomplete.register('user', User.objects.all(), ('username''email'), 5)

autocomplete.register('name', User.objects.all(), ('username',), 5'username''username')



urlpatterns = patterns('',

    url('^autocomplete/(\w+)/$', autocomplete, name='autocomplete'),

    ...


Ещё плюс – в media папке приложения есть jquery и YUI, что как бы намекает на возможность использования и того и другого – мелочь, но приятно (вдруг решу что-то поменять в старых проектах).

По тем же критериям (кроме поддержки YUI), но более новый вариант решения http://code.google.com/p/django-autocomplete/.

Комментариев нет: