不要用Jinja2手动生成JSON。您不可能希望在所有情况下都生成save和valid JSON。在
在较大的模板中嵌入JSON时,使用^{} built-in filter生成JSON。它不包括尾随逗号。在
我会把现成的字典和两个清单的乘积一起递过去:uri_per_metric = [{'met': m, 'uri': u} for u in uri for m in metric_value]
在模板中使用
^{pr2}$
演示:>>> from jinja2 import Template
>>> uri = ["example1.com", "example2.com"]
>>> metric_value = [1024, 2048]
>>> uri_per_metric = [{'met': m, 'uri': u} for u in uri for m in metric_value]
>>> template = Template('''\
...
... data = {{ uri_per_metric|tojson(indent=4) }};
...
... ''')
>>> payload = template.render(uri_per_metric=uri_per_metric)
>>> print(payload)
data = [
{
"met": 1024,
"uri": "example1.com"
},
{
"met": 2048,
"uri": "example1.com"
},
{
"met": 1024,
"uri": "example2.com"
},
{
"met": 2048,
"uri": "example2.com"
}
];
当然,如果您正在生成一个application/json响应(只从web端点返回JSON数据),而这不是更大模板的一部分,那么使用templating根本就不是一个好主意。在这种情况下,使用web框架可能具有的专用JSON支持,例如Flask's ^{} response factory method,或者直接用json.dumps()生成输出。在