以这个非常简单的形式为例:
class SearchForm(Form):
q = forms.CharField(label='search')
这将在模板中呈现:
<input type="text" name="q" id="id_q" />
然而,我想在这个字段中添加一个搜索值的占位符属性,这样HTML看起来就像这样:
<input type="text" name="q" id="id_q" placeholder="Search" />
最好是我想通过字典或类似的东西在表单类中传递占位符值到CharField:
q = forms.CharField(label='search', placeholder='Search')
实现这一目标的最佳方式是什么?
您可以使用此代码为表单中的每个TextInput字段添加占位符attr。占位符的文本将取自模型字段标签。
class PlaceholderDemoForm(forms.ModelForm):
def __init__(self, *args, **kwargs):
super(PlaceholderDemoForm, self).__init__(*args, **kwargs)
for field_name in self.fields:
field = self.fields.get(field_name)
if field:
if type(field.widget) in (forms.TextInput, forms.DateInput):
field.widget = forms.TextInput(attrs={'placeholder': field.label})
class Meta:
model = DemoModel
其他方法都很好。然而,如果你不喜欢指定字段(例如对于一些动态方法),你可以使用这个:
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'
它还允许占位符依赖于指定实例的ModelForms实例。