字典名称未定义通过控制台访问

Name of a dictionary is not defined accessing through console

在我的 routes.py 中,我将一个变量设置为在表单验证语句之后从 SQLAlchemy 元组生成的转换字典。

键入时 from routes import * dict(Book.query.with_entities(Book.username, Book.choice).all()) 在控制台中我得到了想要的正确字典 {'user1': 'choice1', 'user2': 'choice2'}

如果我键入分配给该字典的变量名称 dict_of_users 我得到: NameError: 名称 'dict_of_users' 未定义

为什么它无法识别该变量,因为它在代码中?

我想实现的背后逻辑:

如果用户 select 从列表中的可用选项中选择一个,则该用户及其选择作为键和值添加到字典中,否则字典为空。

我的routes.py:

@app.route("/booking", methods=['POST', 'GET'])
def booking():
    session.permanent = True
    app.permanent_session_lifetime = timedelta(seconds=5)
    form = BookingForm()
    if form.validate_on_submit():
        book = Book(username=current_user.username, choice=form.book.data)
        db.session.add(book)
        db.session.commit()
        flash('Your choice is registered', 'success')
    dict_of_users = dict(Book.query.with_entities(Book.username, Book.choice).all())
    return render_template('booking.html', title='Booking', form=form, dict_of_users=dict_of_users)

如果它只是在函数内部,你不能在函数外部访问它。由于变量仅在函数中定义,因此您会收到 NameError 消息。解决方法是在全局范围内定义变量。

编辑:

作为对您评论的回应:

如果要访问 dict_of_users 变量,请在函数外声明它。然后该变量将包含它在全局范围内最近使用的值,因此可以在函数外部访问。

像这样应该可以解决问题:

dict_of_users = None

@app.route("/booking", methods=['POST', 'GET'])
def booking():
    session.permanent = True
    app.permanent_session_lifetime = timedelta(seconds=5)
    form = BookingForm()
    if form.validate_on_submit():
        book = Book(username=current_user.username, choice=form.book.data)
        db.session.add(book)
        db.session.commit()
        flash('Your choice is registered', 'success')
    dict_of_users = dict(Book.query.with_entities(Book.username, Book.choice).all())
    return render_template('booking.html', title='Booking', form=form, dict_of_users=dict_of_users)