向表单域动态添加占位符

use*_*661 3 html python forms django

我有一个带有几个典型字段的 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."))
Run Code Online (Sandbox Code Playgroud)

在网站上呈现表单时,我使用以下代码创建字段:

    <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>
Run Code Online (Sandbox Code Playgroud)

问题是我想要某些字段(电子邮件、名字、姓氏)的占位符,但我不希望它们成为“电子邮件地址”、“名字”等通用占位符。基于应用程序的业务逻辑,我希望它们是来自视图上下文的实际姓名和电子邮件地址,但用户仍然有权在使它们成为最终版本之前进行更改。

我想利用表单的便利性,但似乎没有一种简单的方法可以在不完全放弃 Django 表单的情况下仅使用常规 HTML 标签来动态生成占位符属性。有什么想法吗?

ndp*_*dpu 7

您可以将占位符动态设置为表单字段:

def someview(request):
    form = SomeForm(..)

    if some_condition:
        form.fields['email'].widget.attrs['placeholder'] = instance.email
Run Code Online (Sandbox Code Playgroud)