动态添加占位符到表单域

时间:2014-03-05 20:35:35

标签: python html django forms

我有一个带有几个典型字段的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标记。有什么想法吗?

2 个答案:

答案 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'

但是,根据您的描述,您确定需要占位符,还是希望表单字段预先填充某个值,该值将提交给服务器,除非用户更改它。