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

Flask中render_template传递多值失败?代码问题排查咨询

问题分析与解决方案

你的程序只返回第一个值的根本原因不是render_template不支持迭代对象,而是returnResult函数里的return output缩进错误——它被放在了for循环内部,导致循环第一次执行就直接返回,后续迭代根本没机会运行。

修正步骤

1. 修复return语句的缩进

把return output移到for循环外面,让循环完整遍历4次后再返回整个列表:

def returnResult():
    output = []
    for K in range(0, 4):
        output.append(f"{prediction[K]} = {recall(actual, prediction, K)}")
    # 将return移至循环外部,确保所有元素都被添加
    return output

2. 可选:优化召回率计算的K值逻辑

注意你的K从0开始时,pred_IT[:0]是空集合,召回率会固定为0。如果需要计算Top1到Top4的召回率,建议把循环范围改为range(1,5),同时调整数组索引:

def returnResult():
    output = []
    # K从1到4,对应取前1至前4个预测值
    for K in range(1, 5):
        output.append(f"{prediction[K-1]} = {recall(actual, prediction, K)}")
    return output

3. 前端模板遍历列表

在predictIT.html中,可直接用Jinja2模板语法遍历传递过来的列表,示例如下:

{% for item in prediction_text %}
    <p>{{ item }}</p>
{% endfor %}

完整修正后的代码片段

def predict_IT():
    new_Xdata_IT = X_IT.sample(5)
    new_Ydata_IT = Cat_Y[new_Xdata_IT.index.values]
    pred_IT = model_IT.predict(new_Xdata_IT)

    def recall(new_Ydata_IT, pred_IT, K):
            act_set = set(new_Ydata_IT)
            pred_set = set(pred_IT[:K])
            result = round(len(act_set & pred_set) / float(len(act_set)), 2)
            return result

    actual = new_Ydata_IT
    prediction = np.array(["Software Engineer / Programmer", "Technical Support Specialist", "Academician", "Administrative Assistant"])
    np.random.shuffle(prediction)
    
    def returnResult():
        output = []
        # 修正循环范围与return语句缩进
        for K in range(1, 5):
            output.append(f"{prediction[K-1]} = {recall(actual, prediction, K)}")
        return output
        
    return render_template("predictIT.html", prediction_text = returnResult())

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.10 06:26:28