【问题标题】:Adding placeholder to UserCreationForm in Django在 Django 中向 UserCreationForm 添加占位符
【发布时间】:2020-06-07 08:07:30
【问题描述】:

我想在 Django 中为 UserCreationForm 添加占位符。

我有点困惑,因为当我搜索这个主题时,我只能找到答案复杂的 like this,人们建议更改 /lib/site-packages/django/contrib/auth/ forms.py。改变 Django 本身的代码是不是很糟糕?

当您将占位符添加到 authenticationForm 时,您不能像这样创建一个自定义表单:

from django import forms
from django.contrib.auth.forms import AuthenticationForm
from django.forms.widgets import PasswordInput, TextInput


class CustomAuthForm(AuthenticationForm):
    username = forms.CharField(widget=TextInput(attrs={'class':'validate','placeholder': 'Email'}))
    password = forms.CharField(widget=PasswordInput(attrs={'placeholder':'Password'}))

【问题讨论】:

    标签: python html css django


    【解决方案1】:

    我会告诉你如何为UserCreationForm做这件事

    from django import forms
    from django.contrib.auth.forms import UserCreationForm
    from django.contrib.auth.models import User
    
    
    class SignUpForm(UserCreationForm):
        class Meta:
            model = User 
            fields = ('username','password1','password2',)
            widgets = {
                'username': forms.TextInput(attrs={
                            'class':'form-control',
                            'placeholder':'Username here',
                    }), 
    
            }
    

    首先,我们导入默认的 userCreationForm 和默认的用户模型。 然后,我们创建一个名为 SignUpForm 的自定义 ModelForm(或您能想到的任何描述性名称!),其父类(是的,您猜对了)UserCreationForm。

    现在,作为一个modelForm,我们需要定义一个模型,在我们的例子中是我们导入的默认用户。

    然后,您只需定义要显示的字段,(You can discover available fields here)

    现在是您问题中最重要的部分,占位符。 (或任何其他属性;))

    您可以简单地通过定义一个小部件字典来做到这一点,其中包含字段名称作为键,字段类型作为值。

    对于我的示例,键是用户名字段,值是

    forms.TextInput()
    

    这一行的实际作用是将给定字段转换为 HTML 输入元素,使其能够访问该输入的所有可能属性(占位符、类、id、最大长度等)。但是如何?

    好吧,只要在 TextInput 里面添加一个 attrs 字典,定义属性名作为键,属性值作为字典值,如下所示:

    'placeholder' : 'Username here..',
    

    这是如果您想创建一个注册/注册表格。 但是对于登录表单,我建议您避免头疼,只需使用 html 表单,将数据通过 request.Get 带到视图中,然后验证您的用户。

    希望你觉得它有用! 和平。

    【讨论】:

    • 谢谢!!我真的很感谢你的解释!!唯一的问题是,这会使输入字段变得很长
    • 很高兴你发现它有用!但无法理解你所说的“很长”是什么意思
    • 只需要删除"class-form":"form-control"。现在没那么大了
    • 哦!是的,这不是答案的一部分 XD !我只是想向您展示,您可以包含任意数量的属性!和平:)
    猜你喜欢
    • 2019-04-14
    • 2018-12-23
    • 2020-11-26
    • 1970-01-01
    • 2018-03-19
    • 2021-09-18
    • 2018-05-04
    • 2021-08-19
    • 1970-01-01
    相关资源
    最近更新 更多