form is undefined 怎么解决,Flask?
How to solve the form is undefined , Flask?
我的应用程序中有两条路线,如果我想访问第二条路线,我会收到此错误消息:
UndefinedError: 'register_form' is undefined
register_form是第一条路线,这里是第一条路线:
@abonent_route.route('/')
@abonent_route.route('/', methods=['GET', 'POST'])
def index():
register_form = RegistrationForm()
return render_template('index.html', register_form=register_form)
这是第二条路线:
@client_route.route('/client/')
@client_route.route('/client/', methods=['GET', 'POST'])
def index():
form_login = ClientLogin()
return render_template('index.html', form_login=form_login)
此外,我还在我的 create_app 函数中初始化了路由,如下所示:
from .abonent import abonent_route
app.register_blueprint(abonent_route)
from .client import client_route
app.register_blueprint(client_route)
现在的问题是,如果我更换了 客户端路由 以使其位于 abonent 路由 之上,并且如果我打开 abonent route,我得到了同样的错误,但有点不同:
UndefinedError: 'form_login' is undefined
这一次,form_login 未定义,如果我再次将 abonent 移回原处,如果我想访问 客户端路由,我得到的第一个错误是register_form undefined .
如有任何帮助,我们将不胜感激。
编辑:添加一些代码
Client main route
:
@client_route.route('/client/', methods=['GET', 'POST'])
def index():
form_login = ClientLogin()
if request.method == 'GET' and request.args.get('next'):
session['next'] = request.args.get('next')
if form_login.validate_on_submit():
user = Client.query.filter_by(
tele = form_login.telephone.data
).first()
if user:
if check_password_hash(user.password, form_login.password.data):
session['client_logged_in'] = user.name
session['client_family'] = user.family
session['client_image'] = user.image
session['client_phone'] = user.tele
if 'next' in session:
next = session.get('next')
session.pop('next')
return redirect(next)
else:
flash('Привет, {}'.format(user.name), 'success')
return redirect(url_for('client.profile'))
else:
flash('Неверные учетные данные.', 'danger')
return redirect(url_for('client.index'))
else:
flash('Неверные учетные данные.', 'danger')
return redirect(url_for('client.index'))
return render_template('index.html', form_login=form_login)
Abonent main route
:
@abonent_route.route('/', methods=['GET', 'POST'])
def index():
register_form = RegistrationForm()
if request.method == 'POST':
if register_form.is_submitted():
if not register_form.terms_agree.data:
flash('Вы должны согласиться с нашим договором и со всеми его пунктами.', 'danger')
return redirect(url_for("abonent.index"))
if register_form.master_salon.data or register_form.master_cto.data or register_form.master_company.data == True:
user = User()
user.name = register_form.name.data
user.family = register_form.family.data
user.bio = register_form.biography.data
if User.query.filter_by(tele=register_form.telephone.data).first():
flash('Этот номер: {} уже использован.'.format(register_form.telephone.data), "warning")
return redirect(url_for('abonent.index'))
else:
user.tele = register_form.telephone.data
user.set_password(register_form.password.data)
db.session.add(user)
db.session.commit()
return redirect(url_for('abonent.confirm', phone=phone))
return render_template('index.html', register_form=register_form)
这是一个 link 显示完整错误的地方,如果 client route 在 abonent route 在 __init__.py
文件中:
我忘记提及的另一件事是,如果尝试打开例如 /client/registration
,它打开时没有任何错误,如果我想访问索引页 /client
,则会出现错误client
您的代码中似乎有一些冗余和块信息。
@abonent_route.route('/')
@abonent_route.route('/', methods=['GET', 'POST'])
您不需要两次声明这条路线。底线就够了。
Also I've initialized the routes inside my create_app function as
following:
不是路由声明。是蓝图。这就像你项目的重要部分。
我可以在你的蓝图中有很多路线。
您不需要为一条路线声明一张蓝图。
要获得更详细的答案,请提供更详细的应用程序源代码。
看看:
http://exploreflask.com/en/latest/blueprints.html 和
DO docs
我一定是在跟自己开玩笑哈哈哈哈,我解决了问题
在我的客户端文件夹中的 __init__.py
文件中,我将路由配置如下:
from flask import Blueprint
client_route = Blueprint(
'client',
__name__,
template_folder='templates/client',
static_folder='../static'
)
from . import views
正如你在这里看到的,当我渲染 index.html 时,index.html 必须在客户端文件夹中在我的观点中,我忘记在 index.html 之前添加 client/ :
return render_template('client/index.html', form_login=form_login)
它正在我的主应用程序模板文件夹中查找,其中保存了另一个 index.html。
现在一切正常:),谢谢大家的关注。
我的应用程序中有两条路线,如果我想访问第二条路线,我会收到此错误消息:
UndefinedError: 'register_form' is undefined
register_form是第一条路线,这里是第一条路线:
@abonent_route.route('/')
@abonent_route.route('/', methods=['GET', 'POST'])
def index():
register_form = RegistrationForm()
return render_template('index.html', register_form=register_form)
这是第二条路线:
@client_route.route('/client/')
@client_route.route('/client/', methods=['GET', 'POST'])
def index():
form_login = ClientLogin()
return render_template('index.html', form_login=form_login)
此外,我还在我的 create_app 函数中初始化了路由,如下所示:
from .abonent import abonent_route
app.register_blueprint(abonent_route)
from .client import client_route
app.register_blueprint(client_route)
现在的问题是,如果我更换了 客户端路由 以使其位于 abonent 路由 之上,并且如果我打开 abonent route,我得到了同样的错误,但有点不同:
UndefinedError: 'form_login' is undefined
这一次,form_login 未定义,如果我再次将 abonent 移回原处,如果我想访问 客户端路由,我得到的第一个错误是register_form undefined .
如有任何帮助,我们将不胜感激。
编辑:添加一些代码
Client main route
:
@client_route.route('/client/', methods=['GET', 'POST'])
def index():
form_login = ClientLogin()
if request.method == 'GET' and request.args.get('next'):
session['next'] = request.args.get('next')
if form_login.validate_on_submit():
user = Client.query.filter_by(
tele = form_login.telephone.data
).first()
if user:
if check_password_hash(user.password, form_login.password.data):
session['client_logged_in'] = user.name
session['client_family'] = user.family
session['client_image'] = user.image
session['client_phone'] = user.tele
if 'next' in session:
next = session.get('next')
session.pop('next')
return redirect(next)
else:
flash('Привет, {}'.format(user.name), 'success')
return redirect(url_for('client.profile'))
else:
flash('Неверные учетные данные.', 'danger')
return redirect(url_for('client.index'))
else:
flash('Неверные учетные данные.', 'danger')
return redirect(url_for('client.index'))
return render_template('index.html', form_login=form_login)
Abonent main route
:
@abonent_route.route('/', methods=['GET', 'POST'])
def index():
register_form = RegistrationForm()
if request.method == 'POST':
if register_form.is_submitted():
if not register_form.terms_agree.data:
flash('Вы должны согласиться с нашим договором и со всеми его пунктами.', 'danger')
return redirect(url_for("abonent.index"))
if register_form.master_salon.data or register_form.master_cto.data or register_form.master_company.data == True:
user = User()
user.name = register_form.name.data
user.family = register_form.family.data
user.bio = register_form.biography.data
if User.query.filter_by(tele=register_form.telephone.data).first():
flash('Этот номер: {} уже использован.'.format(register_form.telephone.data), "warning")
return redirect(url_for('abonent.index'))
else:
user.tele = register_form.telephone.data
user.set_password(register_form.password.data)
db.session.add(user)
db.session.commit()
return redirect(url_for('abonent.confirm', phone=phone))
return render_template('index.html', register_form=register_form)
这是一个 link 显示完整错误的地方,如果 client route 在 abonent route 在 __init__.py
文件中:
我忘记提及的另一件事是,如果尝试打开例如 /client/registration
,它打开时没有任何错误,如果我想访问索引页 /client
,则会出现错误client
您的代码中似乎有一些冗余和块信息。
@abonent_route.route('/')
@abonent_route.route('/', methods=['GET', 'POST'])
您不需要两次声明这条路线。底线就够了。
Also I've initialized the routes inside my create_app function as following:
不是路由声明。是蓝图。这就像你项目的重要部分。 我可以在你的蓝图中有很多路线。 您不需要为一条路线声明一张蓝图。
要获得更详细的答案,请提供更详细的应用程序源代码。
看看: http://exploreflask.com/en/latest/blueprints.html 和 DO docs
我一定是在跟自己开玩笑哈哈哈哈,我解决了问题
在我的客户端文件夹中的 __init__.py
文件中,我将路由配置如下:
from flask import Blueprint
client_route = Blueprint(
'client',
__name__,
template_folder='templates/client',
static_folder='../static'
)
from . import views
正如你在这里看到的,当我渲染 index.html 时,index.html 必须在客户端文件夹中在我的观点中,我忘记在 index.html 之前添加 client/ :
return render_template('client/index.html', form_login=form_login)
它正在我的主应用程序模板文件夹中查找,其中保存了另一个 index.html。
现在一切正常:),谢谢大家的关注。