【问题标题】:TypeError: 'UnboundField' object is not callable with FlaskTypeError:“UnboundField”对象不能用 Flask 调用
【发布时间】:2021-05-01 09:26:47
【问题描述】:

我正在运行 Flask 版本 1.1.2

我的注册表单有以下代码

from flask_wtf import FlaskForm
from wtforms import StringField, PasswordField, SubmitField, BooleanField
from wtforms.validators import DataRequired, Length, EqualTo, Email

class RegistrationForm(FlaskForm):
    def __init__(self):
        self.username = StringField("Username", validators=[DataRequired(), Length(min=2, max=20)])
        self.email = StringField("EMail", validators = [DataRequired(), Email()])
        self.password = PasswordField("Password", validators = [DataRequired(), Length(min = 5)])
        self.confirm_password = PasswordField("Confirm password", validators = [DataRequired(), EqualTo("password")])
        self.submit = SubmitField("Sign Up")

这是注册页面:

{% extends "layout.html" %}
{% block content %}
    <div class="content-section">
      <form method="POST" action="">


        <fieldset class = "form-group">
          <legend class="border-bottom mb-4">Sign In</legend>

          <div class="form-group">
            {{ form.username(class="form-control form-control-lg") }}
          </div>
          <div class="form-group">
            {{ form.email(class="form-control form-control-lg") }}
          </div>
          <div class="form-group">
            {{ form.password(class="form-control form-control-lg") }}
          </div>
          <div class="form-group">
            {{ form.confirm_password(class="form-control form-control-lg") }}
          </div>
        </fieldset>

        <div class="form-group">
          {{ form.submit(class="btn btn-outline-info") }}
        </div>
    </div>

    <div class="border-top pt-3">
      <small class="text-muted">
        Already have an account? <a class="ml-2" href="{{ url_for('register') }}">Sign in </a>
      </small>


{% endblock content %}

但是,当我尝试访问注册页面时,出现以下错误:

  File "D:\xy\-Python\Modules\Flask\Flask_Blog\templates\register.html", line 1, in top-level template code
    {% extends "layout.html" %}
  File "D:\xy\-Python\Modules\Flask\Flask_Blog\templates\layout.html", line 43, in top-level template code
    {% block content %}{% endblock %}
  File "D:\xy\-Python\Modules\Flask\Flask_Blog\templates\register.html", line 11, in block "content"
    {{ form.username(class="form-control form-control-lg") }}
TypeError: 'UnboundField' object is not callable

(上面至少还有 20 行)

【问题讨论】:

    标签: python forms flask jinja2 wtforms


    【解决方案1】:

    您应该如下更改类符号。这适用于您要添加类的所有字段。请参阅https://wtforms.readthedocs.io/en/2.3.x/fields/ 上的文档

    {{ form.username(class_="form-control form-control-lg") }}
    

    并将您的表单更改为以下内容,请参阅https://flask-wtf.readthedocs.io/en/stable/quickstart.html#creating-forms

    class RegistrationForm(FlaskForm):
        username = StringField("Username", validators=[DataRequired(), Length(min=2, max=20)])
        email = StringField("EMail", validators = [DataRequired(), Email()])
        password = PasswordField("Password", validators = [DataRequired(), Length(min = 5)])
        confirm_password = PasswordField("Confirm password", validators = [DataRequired(), EqualTo("password")])
        submit = SubmitField("Sign Up")
    

    【讨论】:

    • 我改变了它,但仍然得到同样的错误。当我将 print(type(self.username)) 放入 RegistrationForm 的构造函数中时,它会打印:“”。
    猜你喜欢
    • 2017-04-15
    • 2016-03-07
    • 1970-01-01
    • 2013-08-06
    • 2017-09-13
    • 2018-07-19
    • 2014-10-08
    • 2014-07-07
    • 1970-01-01
    相关资源
    最近更新 更多