Flask应用中用户输入数据无法在第二页面显示的问题求助
解决Flask中跨页面传递并显示用户输入名称的问题
你遇到的核心问题很明确:earnings页面的视图函数没有将用户输入的名称(也就是Note模型里的data字段)传递给模板。home页面能正常显示是因为你大概率是通过current_user的关联数据(比如遍历user.notes)在模板中获取的,但earnings模板直接用{{ data }}时,模板上下文里根本没有这个变量,所以自然无法显示。
下面是具体的解决步骤:
步骤1:在earnings视图中获取用户的Note数据并传递给模板
修改你的earnings视图函数,添加获取当前用户最新Note数据的逻辑(符合你在home页面输入后,到earnings页面显示的需求),并将数据传入模板:
@views.route('/earnings', methods=['GET', 'POST']) @login_required def earnings(): if request.method == 'POST': earning_data = request.form.get('earning_data') earning_amount = request.form.get('earning_amount') if len(earning_data) < 1: flash('Nie wpisałeś żadnej treści', category='error') elif len(earning_amount) < 1: flash('Nie wpisałeś żadnej wartości', category='error') else: earning_table = Earning( earning_data=earning_data, earning_amount=earning_amount, user_id=current_user.id, ) db.session.add(earning_table) db.session.commit() flash('Zarobek dodany', category='success') # 修复:仅获取当前用户的收入数据,避免显示其他用户的记录 workingData = Earning.query.filter_by(user_id=current_user.id).all() earning_list = [] for sales in workingData: i = sales.earning_amount earning_list.insert(0,i) earning_list = sum(earning_list) # 获取当前用户最新创建的Note(也就是home页面输入的名称) latest_note = Note.query.filter_by(user_id=current_user.id)\ .order_by(Note.date.desc())\ .first() # 将最新Note数据传入模板 return render_template('earnings.html', earning_list=earning_list, user=current_user, latest_note=latest_note)
步骤2:修改earnings模板显示名称
在earnings的HTML模板中,把原来的{{ data }}改成{{ latest_note.data }},同时增加判断逻辑,避免用户还没输入名称时出现模板报错:
<main class="main"> <div class="responsive-wrapper"> <div class="main-header"> <h1> <i> NAME: </i> {{ latest_note.data if latest_note else '请先在首页输入名称' }} </h1> </div> </div> </main>
额外优化说明
- 原代码中
workingData = Earning.query.all()会查询所有用户的收入记录,我改成了filter_by(user_id=current_user.id),确保每个用户只能看到自己的收入数据,这是权限层面的必要修复。 - 如果你的业务场景需要显示用户的所有Note名称,而非最新的一条,只需把
first()改成all(),然后在模板中用循环遍历:{% for note in user_notes %} <p>{{ note.data }}</p> {% endfor %}
内容的提问来源于stack exchange,提问作者matsi
相关产品推荐
相关产品推荐

