我有一个带有几个典型字段的Django表单:
first_name = forms.CharField(label=_("First Name"))
last_name = forms.CharField(label=_("Last Name"))
phone = USPhoneNumberField(label=_("Phone Number"))
email = forms.EmailField()
password1 = forms.CharField(label=_("Password"),
widget=forms.PasswordInput)
password2 = forms.CharField(label=_("Password confirmation"),
widget=forms.PasswordInput,
help_text=_("Enter the same password as above, for verification."))
在网站上呈现表单时,我使用以下代码创建字段:
<label for="id_first_name">First Name: </label>{{ form.first_name }}
<label for="id_last_name">Last Name: </label>{{ form.last_name }}
<p><label for="id_email">Email: </label>{{ form.email }}
<p><label for="id_phone">Phone: </label>{{ form.phone }}
<p><label for="id_password1">Password: </label>{{ form.password1 }}
<p><label for="id_password2">Password Confirmation: </label>{{ form.password2 }}
<p><input type="submit" value="Sign up" /></p>
问题是我想要某些字段的占位符(电子邮件,名字,姓氏),但我不希望它们是通用占位符,如“电子邮件地址”,“名字”等。基于应用程序的业务逻辑,我希望它们是来自视图上下文的实际名称和电子邮件地址,但用户仍然有权在进行最终更改之前进行更改。
我想利用表单的便利性,但似乎没有一种简单的方法可以动态生成占位符属性,而无需完全使用Django表单并只使用常规HTML标记。有什么想法吗?
答案 0 :(得分:3)
您可以动态设置占位符到表单字段:
def someview(request):
form = SomeForm(..)
if some_condition:
form.fields['email'].widget.attrs['placeholder'] = instance.email
答案 1 :(得分:1)
您可以在表单初始化期间动态添加任何表单字段属性,如下所示:
class MyForm(forms.Form):
field = forms.TextField()
def __init__(self, *args, **kwargs):
form = super(MyForm, self).__init__(*args, **kwargs)
form.fields['field'].widget.attrs['placeholder']='custom_placeholder'
但是,根据您的描述,您确定需要占位符,还是希望表单字段预先填充某个值,该值将提交给服务器,除非用户更改它。