Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/html/81.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Html Jinja2异常-找不到属性_Html_Flask_Jinja2_Flask Wtforms - Fatal编程技术网

Html Jinja2异常-找不到属性

Html Jinja2异常-找不到属性,html,flask,jinja2,flask-wtforms,Html,Flask,Jinja2,Flask Wtforms,正在处理Flask/Python中的一个问题。如果出现了一些这样的错误,我能够在它们出现时将它们压扁;然而,我似乎无法弄清这一点 我有一个简单的表单,允许用户登录 但每次加载页面时,我都会遇到以下错误: jinja2.exceptions.UndefinedError:“shop.forms.LoginForm对象”没有属性“submit” 下面是我正在使用的代码,提前谢谢 p、 我看到过关于hidden_tag()属性的类似帖子,但建议的修复方案不适用于这种情况 routes.py forms

正在处理Flask/Python中的一个问题。如果出现了一些这样的错误,我能够在它们出现时将它们压扁;然而,我似乎无法弄清这一点

我有一个简单的表单,允许用户登录

但每次加载页面时,我都会遇到以下错误:

jinja2.exceptions.UndefinedError:“shop.forms.LoginForm对象”没有属性“submit”

下面是我正在使用的代码,提前谢谢

p、 我看到过关于hidden_tag()属性的类似帖子,但建议的修复方案不适用于这种情况

routes.py forms.py login.html

登录
{%extends“layout.html”%}
{%block content%}
{{form.csrf_token}
{{form.email.label}{{form.email}}
{{form.password.label}{{form.password}}
{{form.submit()}}
{%endblock内容%}
编辑:从提交中删除()无法解决此问题。只需从模板中完全删除按钮的实例。见下文:

表单.submit()
更改为
表单.submit
,它将在模板中显示提交按钮

下面是一个使用
flask\u wtf
作为登录表单的示例

使用表格的示例:
app.py

from flask import render_template, url_for, request, redirect, flash, Flask
from forms import LoginForm

app = Flask(__name__)
app.secret_key = 'secret key'

@app.route("/login", methods=['GET', 'POST'])
def login():
    form = LoginForm()
    if request.method == 'POST':
        user_email = form.email.data
        user_password = form.password.data
        if user_email and user_password:
            return "{} - {}".format(user_email, user_password)
    return render_template('login.html', title='Login', form=form)

if __name__ == '__main__':
    app.run(debug=True)
from flask_wtf import FlaskForm
from wtforms import StringField, PasswordField, SubmitField, BooleanField
from wtforms.validators import DataRequired, Length, Email, EqualTo

class LoginForm(FlaskForm):
    email = StringField('Email', validators=[DataRequired(), Email()])
    password = PasswordField('Password', validators=[DataRequired()])
    submit = SubmitField('Login')
forms.py

from flask import render_template, url_for, request, redirect, flash, Flask
from forms import LoginForm

app = Flask(__name__)
app.secret_key = 'secret key'

@app.route("/login", methods=['GET', 'POST'])
def login():
    form = LoginForm()
    if request.method == 'POST':
        user_email = form.email.data
        user_password = form.password.data
        if user_email and user_password:
            return "{} - {}".format(user_email, user_password)
    return render_template('login.html', title='Login', form=form)

if __name__ == '__main__':
    app.run(debug=True)
from flask_wtf import FlaskForm
from wtforms import StringField, PasswordField, SubmitField, BooleanField
from wtforms.validators import DataRequired, Length, Email, EqualTo

class LoginForm(FlaskForm):
    email = StringField('Email', validators=[DataRequired(), Email()])
    password = PasswordField('Password', validators=[DataRequired()])
    submit = SubmitField('Login')
login.html

<!DOCTYPE html>
<html>
<head>
    <title>Login</title>
</head>
<body>

<form method="POST" action="">
    {{ form.csrf_token }}
    <div class="">
        {{ form.email.label }} {{ form.email }}
    </div>
    <div class="">
        {{ form.password.label }} {{ form.password }}
    </div>
    <div class="">
        {{ form.submit }}
    </div>
</form>

</body>
</html>
我成功地在我的机器和中运行了此代码

获取
/login
路由请求(提交表单前):

提交表格后:

问题已解决! 我没有在forms.py中正确拼写submit


简单的文书错误花费了我2个小时。

不幸的是,我尝试了这个,但没有结果。现在根本不显示按钮。还有其他想法吗?@Matt,很高兴听到你解决了这个问题。在我的例子中,我可以使用此代码获取登录按钮。登录按钮显示在我的本地计算机和c9.io中。我已经更新了答案,说明了这一点。我使用的导入版本略有不同,我还使用Flask Login来管理我端的登录系统。这可能就是我们的分歧所在。
<!DOCTYPE html>
<html>
<head>
    <title>Login</title>
</head>
<body>

<form method="POST" action="">
    {{ form.csrf_token }}
    <div class="">
        {{ form.email.label }} {{ form.email }}
    </div>
    <div class="">
        {{ form.password.label }} {{ form.password }}
    </div>
    <div class="">
        {{ form.submit }}
    </div>
</form>

</body>
</html>
Click==7.0
Flask==1.0.2
Flask-WTF==0.14.2
itsdangerous==1.1.0
Jinja2==2.10
MarkupSafe==1.1.1
Werkzeug==0.15.0
WTForms==2.2.1