Rod*_*ele 4 python jinja2 flask
我有一个不灵活的要求 ,即保留 API 输出的键的顺序。我将数据作为 python 字典并将其作为上下文传递给 jinja2 模板,如下所示:
....
return templates.TemplateResponse(
"sat.html",
context={
"request": request,
"address": address,
"json_out": json_out, # this is a dict with correct order
"timing": timing,
"title_text": title_text,
},
)
Run Code Online (Sandbox Code Playgroud)
如果我只是{{ json_out }}在模板中使用,我发现顺序被保留了。如果我使用{{ json_out | tojson }}(因为我有兴趣将其传递给javascript),键就会被排序。为什么?
看这个例子:
用于生成上述内容的代码:
我完全理解这些数据结构是无序的。然而,jinja2 过滤器中似乎发生了一些排序tojson。也许我误解了这里发生的事情......我怎样才能保留初始顺序,同时也使这些数据可供js使用?Django 有一个过滤器允许这样做{{ json_output | json_script:"api_out"}},但我似乎无法使用 Flask/FastAPI 进行复制。
小智 5
刚刚在 Jinja2 中注意到同样的问题。要更改此设置,您必须向环境添加一个新密钥:
env.policies['json.dumps_kwargs'] = {'sort_keys': False}
Run Code Online (Sandbox Code Playgroud)
所有功劳均归功于 Alexander Chzhen,他在此发布了他们找到的解决方案。
| 归档时间: |
|
| 查看次数: |
1167 次 |
| 最近记录: |