from django.template import RequestContext from django.shortcuts import render_to_response from django.http import HttpResponse from django import newforms as forms from django.newforms.widgets import TextInput,flatatt from django.newforms.util import smart_unicode from django.utils.html import escape class AutoCompleteField(TextInput): def __init__(self, url='', options='{paramName: "text"}', attrs=None): self.url = url self.options = options if attrs is None: attrs = {} self.attrs = attrs def render(self, name, value=None, attrs=None): final_attrs = self.build_attrs(attrs, name=name) if value: value = smart_unicode(value) final_attrs['value'] = escape(value) if not self.attrs.has_key('id'): final_attrs['id'] = 'id_%s' % name return (u'
' '') % {'attrs' : flatatt(final_attrs), 'name' : name, 'id' : final_attrs['id'], 'url' : self.url, 'options' : self.options} # # Usage example # class TestForm(forms.Form): person = forms.CharField(required=False, widget=AutoCompleteField(url='/autocomplete/')) def test_view(request): return render_to_response('test_template.html', {'form': TestForm()}, context_instance=RequestContext(request)) def autocomplete(request): """ Return a simple response with a