DjangoでFormのアトリビュートを実行時に指定する

同じフォームを複数の画面で使う場合、使う画面によって指定するcssのclassが異なるケースがあると思います。

そんな時、view側でフォームのインスタンスを生成した後でattrsを指定できると便利です。そんなサンプルです。

class EntryForm(forms.Form):

body = forms.CharField(widget=forms.Textarea())

こんなフォームがあったとして、viewで使うときには

_form = EntryForm()
_form.fields[‘body’].widget.attrs[‘class’] = ‘some_css_class’

です。これで

<textarea id=”id_body” rows=”10″ cols=”40″ name=”body” class=”some_css_class”></textarea>

こんな感じのHTMLが出力されます。

_form.fields[‘body’].widget.attrs[‘disabled’] = True

とかもできるので、シチュエーションによって使い分けられると思います。

Django1.3で試しましたが、1.0以降なら動くんじゃないかな?