【问题标题】:Django form not rendering widgetsDjango表单不呈现小部件
【发布时间】:2017-10-27 19:04:33
【问题描述】:

我想在我的字段中添加占位符,但由于某种原因,这不起作用。当我查看页面源时,占位符属性甚至都不存在。

这是我的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 %}

【问题讨论】:

    标签: python html django forms widget


    【解决方案1】:

    根据docs for ModelForm,Meta 类仅用于从底层模型生成字段。在 ModelForm 类中显式声明的字段不受Meta 中设置的属性的影响。你在你的类中声明email,password1 和password2 在继承的UserCreationForm 类中声明。 (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'
    

    【讨论】:

      猜你喜欢
      • 2014-05-26
      • 2016-11-11
      • 2017-09-11
      • 2012-04-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多