首页 > 解决方案 > 将三维 JSON 列表渲染为 FLASK 中的 HTML 模板

问题描述

<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="utf-8">
  <title>Predictions</title>
</head>
<body>
<div class="results">
     <table>
         {% for item in summary %}
             <tr><td>
             {{ item['Name'] }}
             </td></tr>
         {% endfor %}
     </table>
</div>
</body>
</html>

我有要在 HTML 模板中显示的三维 JSON 列表。下面是我的代码,我无法确定我哪里出错了。我尝试了很多以前回答过的问题,但没有用,因此决定创建一个新问题,但无法找到三维列表的解决方案。

from flask import Flask, abort, request,render_template, json
from DataPreparationv4 import Data_Preprocess
import numpy as np
import pandas as pd
import pickle
from flask_jsonpify import jsonpify

pd.options.mode.chained_assignment = None

filename = 'Test2.pkl'
loaded_model = pickle.load(open(filename, 'rb'))

app = Flask(__name__)

@app.route("/", methods=['GET'])
def Predictions():
#Loading Data
    Base_Data = pd.read_csv('Test.csv')

#Calling customized function for data pre process

    DataSet1 = Data_Preprocess(Base_Data)

    CaseNumber = DataSet1[1]
    DataSet1 = DataSet1[0]
#loading the ML Model
    result = loaded_model.predict(DataSet1)

    prob = loaded_model.predict_proba(DataSet1)

#Extracting the probabilities
    Predictions = pd.DataFrame({'CTA Code':result,'Prob1':prob[:,0],'Prob2':prob[:,1]})

# Getting the probability of the prediction
    Predictions['Probability'] = np.where(Predictions['Prob1'] > Predictions['Prob2'], 
               Predictions['Prob1'], Predictions['Prob2'])

    Predictions['CaseNumber'] = CaseNumber['Case Number']

    CTA_Map = [['Y',1],['N',0]]
    CTA_Map = pd.DataFrame(CTA_Map,columns=['CTA Met','CTA Code'],dtype=float)

# Converting the 0 or 1 predictions to "Y" or "N"
    Predictions = pd.merge(Predictions,CTA_Map[['CTA Code','CTA Met']],on='CTA Code', how='left')
    Predictions =  Predictions.drop(['CTA Code','Prob1','Prob2'], axis=1)
    Predictions = Predictions[['CaseNumber', 'CTA Met', 'Probability']]

    #Converting Data frame to list
    df_list = Predictions.values.tolist()


    JSONP_data = jsonpify(df_list)

    return render_template('hello5.html', summary=JSONP_data)

if __name__ == '__main__':
app.run(host='0.0.0.0',port=5000,debug = True)

下面是HTML代码

<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="utf-8">
  <title>Predictions</title>
</head>
<body>
<div class="results">
     <table>
         {% for item in summary %}
             <tr><td>
             {{ item['Name'] }}
             </td></tr>
         {% endfor %}
     </table>
</div>
</body>
</html>

我在浏览器上收到以下错误:

内部服务器错误 服务器遇到内部错误,无法完成您的请求。服务器过载或应用程序出错。

在命令提示符下:我收到此错误。

顶级模板代码中的文件“D:\Cisco_June Data\templates\hello5.html”第 3 行 {% for item in summary %} TypeError: 'Response' object is not iterable

我正在寻找这样的表格 示例表

JSONP_data 变量中的 JSON 列表示例:

[[[33314116979,“ y”,1.0],[33319019191,“ y”,1.0],[333317767878,“ N”,0.8006605339105347] , [33318214829, "N", 1.0]

请求您的指导以解决此问题。

标签: jsonpython-3.xflask

解决方案


尝试将 df_list 发送到您的模板,而不是调用 jsonpify。

jsonpify 生成一个旨在通过 http 发送的响应对象,而不是在模板中迭代 请参阅 stackoverflow.com/questions/7907596/json-dumps-vs-flask-jsonify


推荐阅读