You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.28 20:12:32