我有一个django模型,我使用ModelForm显示为一个表单。在大多数情况下,默认值对我来说非常有用。
但是,我希望我的html <input ...>
标记有一个额外的属性,即我希望包含placeholder
属性,如下所示:
<input placeholder="{{field.label}}" ... />
将此属性添加到html的最简单方法是什么?据我所知,我需要实现自己的过滤器来输出字段,但是当我想要做的就是让一切都孤立但添加一个额外的属性时,这似乎有些过分。
答案 0 :(得分:28)
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