我想将一个表(pandas数据框)显示为DataTable。在下面的简化示例中,我读取了用户提供的两个数字,这两个数字决定了表的行数和列数。然后,该表的元素数将正确显示,但不会显示该表。
问题是,我想,我把桌子传错了。当我试着return jsonify(number_elements=a * b,
my_table=df)
我明白错误anaconda2/lib/python2.7/json/encoder.py", line 184, in default
raise TypeError(repr(o) + " is not JSON serializable")
TypeError: 0 1 2 3 0 51 35 10 84 1 30 60 79 24 is not JSON
serializable
如果我用return jsonify(number_elements=a * b,
my_table=df.to_json())
然后没有错误,但是表仍然没有显示。
我该怎么做才能正确?
我的index.html文件如下:
rel="stylesheet">
rel="stylesheet">
$(function() {
$('a#calculate').bind('click', function() {
$.getJSON('/_get_table', {
a: $('input[name="a"]').val(),
b: $('input[name="b"]').val()
}, function(data) {
$("#elements").text(data.number_elements);
$("#a_nice_table").DataTable(data.my_table);
});
return false;
});
});
Create a pretty table
Number of rows
Number of columns
Result
Number of elements:
Hallo
Here should be a table
我的文件app.py如下所示:from flask import Flask, render_template, request, jsonify
import pandas as pd
import numpy as np
# Initialize the Flask application
app = Flask(__name__)
@app.route('/')
def index():
return render_template('index.html')
@app.route('/_get_table')
def get_table():
a = request.args.get('a', type=int)
b = request.args.get('b', type=int)
df = pd.DataFrame(np.random.randint(0, 100, size=(a, b)))
return jsonify(number_elements=a * b,
my_table=df)
if __name__ == '__main__':
app.run(debug=True)