web-dev-qa-db-ja.com

DjangoフォームでカスタムHTML属性を設定するにはどうすればよいですか?

ページの一部であるDjangoフォームがあります。フィールドがあるとしましょう:

search_input = forms.CharField(_(u'Search Word'), required=False)

{{ form.search_input }}を介してテンプレートでのみアクセスできます。カスタムHTML属性(名前や値など)を設定するにはどうすればよいですか?必要なカスタム属性をすべてのタイプのフィールドに追加できる柔軟なソリューションを見つけたいと思います。

見つかりました https://docs.djangoproject.com/en/dev/ref/forms/widgets/#widget

しかし、attrsを使用すると(CharFieldで使用した場合)次のようになります。

__init__() got an unexpected keyword argument 'attrs'
16
JackLeo

CharFieldのウィジェットを変更して、探している効果を実現できます。

search_input = forms.CharField(_(u'Search Word'), required=False)
search_input.widget = forms.TextInput(attrs={'size': 10, 'title': 'Search',})
19
mcanterb

これを試すこともできます:

search_input = forms.CharField(
    _(u'Search Word'),
    required=False,
    widget=forms.TextInput(attrs={'size': 10, 'title': 'Search',})
)

これは、 ウィジェットインスタンスのスタイリング というタイトルのセクションに記載されています。

8
Don

古い質問ですが、別の選択肢を探している人には、これもあります: https://docs.djangoproject.com/en/1.6/topics/forms/modelforms/#overriding-the-default-fields

あなたはこのようなことをすることができます:

from Django.forms import ModelForm, Textarea
from myapp.models import Author

class AuthorForm(ModelForm):
    class Meta:
        model = Author
        fields = ('name', 'title', 'birth_date')
        widgets = {
            'name': Textarea(attrs={'cols': 80, 'rows': 20}),
        }
6
webtweakers

フィルタを使用したテンプレートのみのソリューションもあります。私はお勧め - Django-widget-tweaks

{% load widget_tweaks %}

{{ form.email|attr:'required:true' }}
3
John Lehmann