我有一个不可变的要求:保留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,
},
)
如果我在模板中只使用{{ json_out }}
,则会发现顺序得到保留。如果我使用{{ json_out | tojson }}
(因为我想将其传递给javascript),则键会被排序。为什么?
请参考此示例:
生成上述内容的代码:
我完全理解这些数据结构旨在无序。然而,似乎在jinja2的tojson
过滤器中进行了某种排序。也许我误解了这里发生的事情...如何在保留初始排序的同时使此数据可用于js?Django有一个允许这样做的过滤器{{ json_output | json_script:"api_out"}}
,但我似乎无法在Flask / FastAPI中复制。