将json数据传递给模板
我刚开始学习flask和网页开发。我想把一个算法的输出结果传递给模板,这样就能显示给用户看。但是我好像做错了什么,HTML里除了空的项目符号,什么也看不到。
routes.py
from flask import Flask, request, jsonify, render_template
from image_processing import find_cross_v4
import json
app = Flask(__name__)
def run_algorithms():
return {'file_name': f.filename, 'set_min': 'hello world 1','rep_sec':'hello world 2'}
@app.route('/upload', methods=['POST'])
def upload():
f = request.files['file']
f.save("image_processing/query.jpg")
data = run_algorithms()
#jsondata = jsonify(data)
#data =json.loads(jsondata)
return render_template('results.html',data=data)
@app.route('/test',methods=['POST'])
def test():
try:
f = request.files['file']
f.save("image_processing/query.jpg")
except KeyError:
return jsonify({'error': 'File Missing'})
result = run_algorithms(f)
return jsonify(result)
if __name__ == "__main__":
app.debug = True
app.run(host='0.0.0.0')
results.html
<!DOCTYPE html>
<html>
<head>
</head>
<body>
<h1 class="logo">Results</h1>
<ul>
{% for data in data %}
<li>{{data.file_name}}</li>
<li>{{data.set_min}}</li>
<li>{{data.rep_sec}}</li>
{% endfor %}
</ul>
</body>
</html>
我在命令行输入了'/test'
curl --form file=@somefile.jpg http://0.0.0.0:5000/test
得到了下面的输出。
{ "file_name": "somefile.jpg", "rep_sec": "hello world 2", "set_min": "hello world 1" }
当我通过浏览器尝试时得到的结果

3 个回答
0
你的 run_algorithms 方法没有任何参数,但在返回一个字典的时候,
{'file_name': f.filename, ... }
你用一个 'f' 对象来返回文件名,但这个 'f' 是从哪里来的呢?所以你应该在 upload 方法里:
data = run_algorithms(f) # call the method with f parameter.
然后把这个参数加到你的 run_algorithms 方法里:
def run_algorithms(f):
return {'file_name': f.filename, 'set_min': 'hello world 1','rep_sec':'hello world 2'}
希望这能帮到你。祝好运!
1
你是想问:
result = find_cross_v4.image_processing(f)
你没有对那个 f
参数做任何处理,是故意这样吗?因为里面可能会发生一些奇怪的事情,所以建议用一个模拟函数来测试和 Flask 相关的功能,也就是:
def run_algorithms(f):
return {'file_name': 'sample file name', 'set_min': 'minimum value','rep_sec': 'other placeholding data'}
如果这个输出的数据符合预期(应该是这样的),那么你就可以确定错误出在图像处理的代码上(或者更可能是返回的值)。
3
我把HTML模板中的'for'语句去掉了,结果就好了!