字典名称未定义通过控制台访问
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)
在我的 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)