Django AutoCompleteField
Tie, kuri izmanto Django savu web lapu izstrādē, vai arī vēlas to izmantot iespējams zin, ka kādu laiciņu jau ir pieejama jauna formu veidošanas bibliotēka newforms. Viens no jauninājumiem ir tas, ka ir iespējams norādīt widgetu katram formas elementam. Widgets var būt kāds no jau esošajiem, kā arī pašu veidots.
Tā, kā es esmu sācis izmantot script.aculo.us javascript bibliotēku, tad radās nepieciešamība izmantot burvīgo Ajax.Autocompleter lauku arī iekš Django, tad nu rezultāts ir sekojošs.
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='{}',attrs={}): self.url = url self.options = options 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'<input /> <div class="autocomplete" id="box_%(name)s"></div> <script type="text/javascript">new Ajax.Autocompleter(\'%(id)s\', \'box_%(name)s\', \'%(url)s\', %(options)s);</script>' % { 'attrs' : flatatt(final_attrs), 'name' : name, 'id' : final_attrs['id'], 'url' : self.url, 'options' : self.options }
Lai izmantotu šo widgetu, to nepieciešams saglabāt savā projektā un importēt attiecīgā vietā.
from myproject.widgets import AutoCompleteField ..... person = forms.CharField(label='Person',required=False,widget=AutoCompleteField(url='/person/autocomplete/')) .....
Tik nevajadzētu piemirst, ka vispirms lapas head ir jaievieto attiecīgie javascript faili.