将属性添加到django ModelForm字段的<input />标记

时间:2010-12-03 01:39:36

标签: django django-forms

我有一个django模型,我使用ModelForm显示为一个表单。在大多数情况下,默认值对我来说非常有用。

但是,我希望我的html <input ...>标记有一个额外的属性,即我希望包含placeholder属性,如下所示:

<input placeholder="{{field.label}}" ... />

将此属性添加到html的最简单方法是什么?据我所知,我需要实现自己的过滤器来输出字段,但是当我想要做的就是让一切都孤立但添加一个额外的属性时,这似乎有些过分。

3 个答案:

答案 0 :(得分:28)

请参阅documentation

class AuthorForm(ModelForm):
    class Meta:
        model = Author
        widgets = {
            'name': TextInput(attrs={'placeholder': 'name'}),
        }

您始终可以创建自己的小部件,该小部件从TextInput派生并包含占位符属性,并使用小部件字典将字段简单地映射到新小部件,而无需为每个字段指定占位符属性。

答案 1 :(得分:14)

我个人更喜欢使用这种方法:

def __init__(self, *args, **kwargs):
    super(MyForm, self).__init__(*args, **kwargs)
    self.fields['email'].widget.attrs['placeholder'] = self.fields['email'].label or 'email@address.nl'

如果您还没有__init__,则需要更多代码,但您不需要指定小部件。

答案 2 :(得分:-1)

稍微更改@ josh-smeaton的答案。

class AuthorForm(ModelForm):
class Meta:
    model = Author
    widgets = {
        'name': forms.TextInput(attrs={'placeholder': 'name'}),
    }

没有“表格”。在TextInput前面会引发NameError。

Django Ver 2.0.1