django 将占位符文本添加到表单字段

Posted

技术标签:

【中文标题】django 将占位符文本添加到表单字段【英文标题】:django add placeholder text to form field 【发布时间】:2017-10-23 07:59:34 【问题描述】:

在 Django 中,我有以下代码在 html 页面上创建用户名和密码表单:

<div class="control-group">
     form.username 
</div>
<div class="control-group">
     form.password 
</div>

我想在字段中添加“用户名”和“密码”占位符文本,然后当用户单击该字段时,该词消失。实现这一目标的最佳方法是什么?

【问题讨论】:

How do I add a placeholder on a CharField in Django?的可能重复 【参考方案1】:

我希望你的项目中有一个 forms.py 文件。创建表单时,您可以使用以下内容为字段设置占位符:

username = forms.CharField(label='username', 
                widget=forms.TextInput(attrs='placeholder': 'username'))

如果您的项目中有 ModelForm,您可以实现为:

 class MyForm(forms.ModelForm):
    class Meta:
        model = User
        widgets = 
            'username': forms.TextInput(attrs='placeholder': 'username'),
             ..........
        

【讨论】:

【参考方案2】:

您必须使用placeholder 属性

class LoginForm(forms.Form):
    username = forms.CharField(label='username')
    password = forms.CharField(label='password')


    def __init__(self, *args, **kwargs):
        super(LoginForm, self).__init__(*args, **kwargs)
        self.fields['username'].widget.attrs['placeholder'] = 'username'
        self.fields['password '].widget.attrs['placeholder'] = 'password'

class LoginForm(forms.Form):
    username = forms.CharField(label='username',widget=forms.TextInput(attrs='placeholder':'username'))
    password = forms.CharField(label='password',widget=forms.PasswordInput(attrs='placeholder':'password'))

【讨论】:

所以我把它放在了我的 forms.py 中。我的 views.py 中需要什么? @Jaron787 For placeholder is not required to view special【参考方案3】:

如果它可能对某人有所帮助,我想使用模型的 help_text 属性作为占位符。根据 aziminia 的回答,这是我能想到的最简单的方法:

class MyForm(forms.ModelForm):
    def __init__(self, *args, **kwargs):
        super().__init__(*args, **kwargs)
        for _, value in self.fields.items():
            value.widget.attrs['placeholder'] = value.help_text

    class Meta:
        model = models.MyModel
        fields = (...)

【讨论】:

【参考方案4】:

如果您想使用 字段名称 作为占位符,您可以使用以下代码:

class LoginForm(forms.ModelForm):
    def __init__(self, *args, **kwargs):
        super(LoginForm, self).__init__(*args, **kwargs)
        for k,v in self.fields.items():
            v.widget.attrs['placeholder'] = k.capitalize()

否则请参考this answer。

【讨论】:

以上是关于django 将占位符文本添加到表单字段的主要内容,如果未能解决你的问题,请参考以下文章

如何将类、id、占位符属性添加到 django 模型表单中的字段

django表单下拉字段中的占位符

Django - 如何在作为模型当前字段的模型表单上添加占位符?

如何将占位符颜色属性添加到 xamarin 表单中的自动完成字段?

将占位符添加到表格视图单元格上的文本字段

将占位符文本添加到文本字段时,iOS 7 中的应用程序崩溃