Djangoのformエラーのinput要素にclassを付与する
djangoで入力エラーのとき、input項目にclass="error"のようにして、デザインを変えたい場合。
フォームで動的にセットするにはどうすればいいか、調べてやってみました。
from django import forms class ContactForm(forms.Form): name = forms.CharField(max_length=10) email = forms.EmailField(widget=forms.TextInput(attrs={'class': 'mail'})) def __init__(self, *args, **kwargs): super(ContactForm, self).__init__(*args, **kwargs) if self.errors: for f_name in self.fields: if f_name in self.errors: classes = self.fields[f_name].widget.attrs.get('class', '').split() classes.append('error') self.fields[f_name].widget.attrs['class'] = ' '.join(classes)
エラーでないとき
>>> form = ContactForm({'name': 'brainstorm', 'email': 'brainstorm@example.com'}) >>> form.is_valid() True >>> form["name"].as_widget() u'<input id="id_name" maxlength="10" name="name" type="text" value="brainstorm" />' >>> form["email"].as_widget() u'<input class="primary" id="id_email" name="email" type="text" value="brainstorm@example.com" />
エラーのとき
>>> form = ContactForm({'name': 'aaaaaaaaaaaaaaaaaaaaaaaaaaa', 'email': 'aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa'}) >>> form.is_valid() False >>> form["name"].as_widget() u'<input class="error" id="id_name" maxlength="10" name="name" type="text" value="aaaaaaaaaaaaaaaaaaaaaaaaaaa" />' >>> form["email"].as_widget() u'<input class="primary error" id="id_email" name="email" type="text" value="aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa" />'