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

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

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

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

【问题讨论】:

标签: python html django forms placeholder


【解决方案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

      【讨论】:

        猜你喜欢
        • 2020-11-29
        • 2018-08-07
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-09-18
        • 1970-01-01
        • 2013-10-29
        • 2019-04-13
        相关资源
        最近更新 更多