プログラミング/Django/フォームのinputやselect要素にCSSのclass名を指定する

forms.pyにて入力

widgetの変更による処理

from django import forms

class ContactForm(forms.Form):
    CATEGORIES = (
        ('1', 'お仕事の依頼'),
        ('2', 'サイト内容に関するお問い合わせ'),
    )

    name = forms.CharField(
        label='お名前', max_length=50,
        required=False, help_text='※任意',
        widget=forms.TextInput(attrs={'class': 'form-control'})
    )
    email = forms.EmailField(
        label='メールアドレス', required=False, help_text='※任意',
        widget=forms.EmailInput(attrs={'class': 'form-control'})
    )
    text = forms.CharField(label='お問い合わせ内容', widget=forms.Textarea(attrs={'class': 'form-control'}),)

    category = forms.ChoiceField(label='カテゴリ', choices=CATEGORIES, widget=forms.RadioSelect(attrs={'class': 'form-control'}))

__init__メソッドの上書きでの処理

from django import forms

class ContactForm(forms.Form):
    CATEGORIES = (
        ('1', 'お仕事の依頼'),
        ('2', 'サイト内容に関するお問い合わせ'),
    )

    name = forms.CharField(
        label='お名前', max_length=50,
        required=False, help_text='※任意',
    )
    email = forms.EmailField(
        label='メールアドレス', required=False, help_text='※任意',
    )
    text = forms.CharField(label='お問い合わせ内容',)

    category = forms.ChoiceField(label='カテゴリ', choices=CATEGORIES,)

    def __init__(self, *args, **kwargs):
        super().__init__(*args, **kwargs)
        for field in self.fields.values():
            field.widget.attrs['class'] = 'form-control'

label要素を表示しなうようにする場合

    def __init__(self, *args, **kwargs):
        super().__init__(*args, **kwargs)
        for field in self.fields.values():
            field.widget.attrs['placeholder'] = field.label
%d人のブロガーが「いいね」をつけました。