Poniższa klasa dziedziczy po widgetie Textarea i zawiera kod javascript, który wyświetla liczbę znaków, które użytkownik może wprowadzić w obszarze tekstowym.django - w jaki sposób uzyskać dostęp do pola formularza z niestandardowego widżetu
class TextAreaWithCharCounter(forms.Textarea):
class Media:
js = ('js/jquery.charcounter.js',)
def render(self, name, value, attrs = None):
id = attrs['id']
max_length = self.attrs.get('max_length', 200)
output = super(TextAreaWithCharCounter, self).render(name, value, attrs)
output += mark_safe(u'''
<script type="text/javascript">
$("#%s").charCounter(%d, {classname:"charcounter"});
</script>'''%(id, max_length))
return output
Odpowiedni fragment kodu formularza jest następujący:
class MyForm(forms.Form):
foo = forms.CharField(max_length = 200, widget = TextAreaWithCharCounter(attrs={'max_length':200}))
...
Można zobaczyć, że dwa razy przejść max_length
argumentu, jeden w polu i jeden dla widgetu. Lepszym sposobem może być uzyskanie dostępu do pola formularza z widżetu i uzyskanie jego atrybutu max_length, dzięki czemu argument max_length nie będzie wymagany przez widget. Jak mogę to zrobić?
dokonaniu dobrych punktów, dzięki. – shanyu