0

我正在使用 Quart(本质上是 Flask for HTTP/2)来提供一些 JSON 内容。JSON 内容以漂亮的打印格式驻留在 templates/ 目录中,例如

例子.json

{
  "key1": "value1",
  "list1": [
    {
      "key2": "{{ keyword_arg2 or "value2"}}",
      "list2": [
        {
          "key3": "value3 with spaces",
          "key4": "value4"
        }
      ]
    }
  ]
}

如果我只是return render_template('example.json'),它将保留原始文件中的所有空格。我想返回一个紧凑的形式,即

{"key1":"value1","list1":[{"key2":"value2","list2":[{"key3":"value3 with spaces","key4":"value4"}]}]}

有没有一种好方法可以做到这一点(理想情况下也可以将内容类型设置为应用程序/json)。到目前为止,我想出的是:

body = await render_template('example.json')
body = body.replace('\n', '')
body = ''.join(body.split())
r = await make_response(body)
r.headers.set('Content-type', 'application/json')
return r

但它不能很好地处理值中的空格(这个版本完全删除了它们)。Quart中的jsonify函数自动将Content-type设置为application/json,但是对render_template返回的字符串似乎并没有很好的操作,除非我用错了。

4

1 回答 1

1

render_template返回一个字符串,然后您可以将其解析为 JSON 并从路由返回。然后,这将使用应用程序的 JSON 配置值返回 JSON 响应,默认值在此处链接,例如

import json

@app.get("/")
async def route():
    body = await render_template('example.json')
    data = json.loads(body)
    return data

请注意,从 Quart 路由返回字典等效于调用jsonify并返回该结果。

于 2021-08-12T18:48:44.567 回答