2017-05-26 79 views
0

我想向我的字段添加占位符,但由于某种原因,这不起作用。当我查看页面源时,占位符属性甚至不在那里。Django窗体不呈现小部件

这里是我的forms.py:

class RegistrationForm(UserCreationForm): 
    email = forms.EmailField(required=True, max_length=254) 

    class Meta: 
     model = User 
     fields = ('username', 'email', 'password1', 'password2',) 
     widgets = { 
      'username' : forms.TextInput(attrs={'placeholder': 'Username'}),   
      'email' : forms.TextInput(attrs={'placeholder': 'Email'}), 
      'password1' : forms.TextInput(attrs={'placeholder': 'Password'}), 
      'password2' : forms.TextInput(attrs={'placeholder': 'Confirm Password'}), 
     } 

这是我使用的HTML模板:

<!DOCTYPE html> 

{% extends 'base.html' %} 
{% load staticfiles %} 

{% block content %} 
<section class="container"> 
    <div class="row centre-v"> 
    <div class="card login-card"> 
     <div class="main card-block"> 
     <h1>Sign up</h1> 
     <div class="login-or"> 
      <hr class="hr-or"> 
     </div> 
     <form action="." method="post" class="register-form"> 
      {% csrf_token %} 
      {% for field in form %} 
      <p> 
       {{ field }} 
       {% for error in field.errors %} 
       <div class="alert alert-danger" role="alert"><strong>{{ error }}</strong></div> 
       {% endfor %} 
      </p> 
      {% endfor %} 
      <div class="btn-login"> 
      <input class="btn btn-info" type="submit" value="Register"> 
      </div> 
     </form> 
     </div> 
    </div> 
    </div> 
</section> 
{% endblock %} 

回答

0

按照docsModelForm,在Meta类是只用于生成来自底层模型的字段。在ModelForm类中明确声明的字段不受在Meta中设置的属性的影响。您在您的班级中声明email,并在继承的UserCreationForm类中声明password1password2。 (username是自动生成的,因此您在Meta类中设置的窗口小部件属性可能适用于该字段。)要设置声明字段的属性,您可以使用self.fields字典。

class RegistrationForm(UserCreationForm): 
    email = forms.EmailField(required=True, max_length=254) 

    class Meta: 
     model = User 
     fields = ('username', 'email', 'password1', 'password2',) 

    def __init__(self, *args, **kwargs): 
     super().__init__(*args, **kwargs): 
     self.fields['username'].widget.attrs['placeholder'] = 'Username' 
     self.fields['email'].widget.attrs['placeholder'] = 'Email' 
     self.fields['password1'].widget.attrs['placeholder'] = 'Password' 
     self.fields['password2'].widget.attrs['placeholder'] = 'Confirm Password'