【发布时间】:2017-04-21 07:00:17
【问题描述】:
我的应用程序中有两条路线,如果我想访问第二条路线,我收到此错误:
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)
现在的问题是,如果我将 client route 替换为高于 abonent route 并且如果我打开 abonent route,我得到了同样的错误,但有点不同:
UndefinedError: 'form_login' is undefined
这一次,form_login 未定义,如果我再次将 abonent 移回原位,如果我想访问 client route,我得到了第一个错误是 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)
这是一个显示完整错误的链接,如果 client route 位于 __init__.py 文件中的 abonent route 下,则会引发此错误:
我忘记提及的另一件事是,如果尝试打开例如 /client/registration,它会毫无错误地打开,如果我想访问 /client(这是 client 的索引页面),则会引发错误
【问题讨论】:
-
为什么你有冗余路由?只有一个就足够了,因为两者都路由相同的路径和请求,并且您是否将
RegistrationForm和ClientLogin导入到您的文件中?这个错误是在什么时候提出的?,您是否应该发布完整的错误以将其追溯到正确的点? -
如果我在我的 create_app 函数 中替换了这些路由中的一个,并尝试访问它,则会引发错误,所以如果 abonent 是上面如果我想打开 /client/ 会出现一个错误,上面写着:register_form undefined,反之亦然,客户端会出现另一个错误,上面写着:form_login undefined .
-
是的,我在我的 abonent views.py 中导入了 RegisterForm 而不是 ClientLogin
标签: python flask flask-wtforms