rad:У каждого поля есть атрибут help_text. Воспользуйтесь им.
Не то, человеку класс нужен. В общем можно вот так:
class ContactForm(forms.Form):
subject = forms.CharField(widget=forms.TextInput(attrs={'class': 'validate[required] text-input'}))
email = forms.EmailField(required=False)
message = forms.CharField()
Но для каждого поля писать виджет, который сам по себе не меняется, как то... Судя по всему вы собираетесь клиентскую валидацию сделать. Можно вот так:
class ContactForm(forms.Form):
subject = forms.CharField(widget=forms.TextInput()
email = forms.EmailField(required=False)
message = forms.CharField()
def __init__(self, *args, **kwargs):
super(ContactForm, self).__init__(*args, **kwargs)
for field_name in self.fields:
if self.fields[field_name].required:
self.fields[field_name].widget.attrs['class'] = 'validate[required]'
Ну или просто и не так универсально - прописать для конкретных полей.
Про кастомный шаблон почитайте Здесь