在Django中禁用文本框的自动完成功能?
有没有人知道怎么在Django中关闭文本框的自动补全功能?
比如说,我从模型生成的一个表单里有一个输入信用卡号码的字段。让自动补全功能保持开启是不太好的做法。如果我手动制作这个表单,我会加上autocomplete="off"这个设置,但在Django中怎么做才能关闭自动补全,同时又不影响表单的验证呢?
5 个回答
13
如果你在自己定义表单,可以给表单里的字段添加一些属性。
class CommentForm(forms.Form):
name = forms.CharField(widget=forms.TextInput(attrs={
'autocomplete':'off'
}))
但是如果你使用的是模型表单,就不能直接在表单里定义字段属性了。不过,你可以通过 __init__
方法来添加一些必要的属性。
class CommentForm(forms.ModelForm):
def __init__(self, *args, **kwargs):
super(CommentForm, self).__init__(*args, **kwargs)
self.fields['name'].widget.attrs.update({
'autocomplete': 'off'
})
你还可以通过 Meta
来添加属性。
class CommentForm(forms.ModelForm):
class Meta:
widgets = {
'name': TextInput(attrs={'autocomplete': 'off'}),
}
37
在表单标签里加上autocomplete="off",这样你就不用去修改django.form的实例了。
<form action="." method="post" autocomplete="off">
{{ form }}
</form>
36
在你的表单里,指定你想用的控件类型,并在这个控件上添加一个叫做 attrs
的字典。举个例子(直接来自Django文档):
class CommentForm(forms.Form):
name = forms.CharField(
widget=forms.TextInput(attrs={'class':'special'}))
url = forms.URLField()
comment = forms.CharField(
widget=forms.TextInput(attrs={'size':'40'}))
只需要在这个 attrs 字典里加上 'autocomplete': 'off'
就可以了。