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 routeabonent route__init__.py 文件中:

Click to open

我忘记提及的另一件事是,如果尝试打开例如 /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.htmlDO 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。

现在一切正常:),谢谢大家的关注。