将json数据传递给模板

4 投票
3 回答
16667 浏览
提问于 2025-04-17 22:34

我刚开始学习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'语句去掉了,结果就好了!

撰写回答