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

无法通过HTML<a>标签将心情数据传递至Python Flask后端求助

我正在开发一个根据用户所选心情生成歌曲播放列表的网站,目前遇到的问题是:无法将用户从列表中选择的心情数据通过HTML的标签传递到Python后端进行后续处理。附上相关代码及报错信息,寻求技术帮助。

Flask代码

from flask import Flask, render_template, request

app = Flask(__name__)
# 假设songListGenerator是已实现的列表生成类
class songListGenerator:
    def __init__(self, mood):
        self.mood = mood
    def generate_list(self):
        # 模拟生成对应心情的歌曲列表
        return [f"{self.mood} Track 1", f"{self.mood} Track 2", f"{self.mood} Track 3"]

@app.route("/")
@app.route("/music/")
def music_page():
    return render_template("music_page_1.html")

# 合并冲突路由,统一处理GET请求
@app.route("/music/generated_list/", methods=["GET"])
def music_page_2():
    mood_selected = request.args.get("mood")
    if not mood_selected:
        # 未获取到心情时返回选择页面并提示
        return render_template("music_page_1.html", error="请先选择心情")
    
    print(f"Selected Mood: {mood_selected}")
    listGenerator = songListGenerator(mood_selected)
    generated_list = listGenerator.generate_list()
    
    return render_template("music_page_2.html", generated_list=generated_list)

@app.route("/music/generated_list/connect_spotify/", methods=["GET"])
def music_page_3():
    username = request.args.get("user")
    return render_template("music_page_3.html")

HTML代码(修正后)

<body>
    <header>
        <div class="heading">
            <ul>
                <li id="devo">
                    <a href="/music/generated_list/?mood=Devotional">Devotional</a>
                </li>
            </ul>
            <ul>
                <li id="hap">
                    <a href="/music/generated_list/?mood=Happy">Happy</a>
                </li>
            </ul>
            <ul>
                <li id="sad">
                    <a href="/music/generated_list/?mood=Sad">Sad</a>
                </li>
            </ul>
            <ul>
                <li id="rel">
                    <a href="/music/generated_list/?mood=Relaxing">Relaxing</a>
                </li>
            </ul>
            <ul id="rom2">
                <li id="rom">
                    <a href="/music/generated_list/?mood=Romantic">Romantic</a>
                </li>
            </ul>
            <ul id="nos2">
                <li id="nos">
                    <a href="/music/generated_list/?mood=Nostalgic">Nostalgic</a>
                </li>
            </ul>
        </div>
    </header>
    <footer>
        <div class="foot">
            <ul id="cel2">
                <li id="cel">
                    <a href="/music/generated_list/?mood=Celebration">Celebration</a>
                </li>
            </ul>
            <ul id="ene2">
                <li id="ene">
                    <a href="/music/generated_list/?mood=Energetic">Energetic</a>
                </li>
            </ul>
        </div>
    </footer>
    <div id="main">
        <h2>WHAT IS YOUR MOOD LIKE?</h2>
        <h4>DRAG THE PLAY BUTTON TO SET THE MOOD</h4>
    </div>
</body>

报错信息

内部服务器错误
服务器遇到内部错误,无法完成您的请求。可能是服务器过载,或者应用程序存在错误。

报错截图

问题原因及修正说明

  1. 路由冲突:原代码中/music/generated_list/绑定了两个视图函数,Flask无法识别有效处理逻辑,直接引发服务器错误。合并为单个路由即可解决。
  2. GET参数获取错误:原代码用request.form.get()获取GET请求参数,这是错误用法——request.form仅适用于POST表单数据,GET参数需用request.args.get()。
  3. 全局变量风险:原代码使用全局变量存储用户选择的心情和生成的列表,多用户访问时会导致数据混乱,直接在路由内处理参数和生成列表更安全。
  4. 表单与标签逻辑冲突:原HTML中未定义submitForm函数,且<a>标签的href跳转会绕过表单提交。直接在<a>的href中拼接?mood=心情值,后端通过request.args读取参数,是更简单可靠的实现方式。

内容的提问来源于stack exchange,提问作者dev

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.08 07:15:58