Работа над проблемой во Flask / Python. Было несколько таких ошибок, и я смог их раздавить по мере их появления; тем не менее, этот, который я, кажется, не могу понять до конца.
У меня есть простая форма, которая позволяет пользователям войти в систему.
Но каждый раз, когда я загружаю страницу, меня встречает эта ошибка:
jinja2.exceptions.UndefinedError: 'объект shop.forms.LoginForm' не имеет атрибута 'submit'
Ниже приведен код, с которым я работаю, заранее спасибо.
p.s. Я видел похожие посты относительно атрибута hidden_tag (), но предложенные исправления не работают для этого сценария.
routes.py
import os
from flask import render_template, url_for, request, redirect, flash
from shop import app, db
from shop.models import Author, Book, User
from shop.forms import RegistrationForm, LoginForm
from flask_login import login_user, current_user, logout_user, login_required
@app.route("/login", methods=['GET', 'POST'])
def login():
form = LoginForm()
if request.method == 'POST':
user = User.query.filter_by(email=form.email.data).first()
if user is not None and user.verify_password(form.password.data):
login_user(user)
return redirect(url_for('home'))
return render_template('login.html', title='Login', form=form)
forms.py
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()])
sumbit = SubmitField('Login')
login.html
<!DOCTYPE html>
<html>
<head>
<title>Login</title>
</head>
<body>
{% extends "layout.html" %}
{% block content %}
<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>
{% endblock content %}
</body>
</html>
EDIT: удаление () из submit не решает проблему. Просто удаляет экземпляр кнопки полностью из шаблона. Смотрите ниже: