Не генерировать JSON вручную с Jinja2 . Вы не можете надеяться на создание сохраненного и действительного JSON при любых обстоятельствах.
При встраивании JSON в шаблон большего размера используйте встроенный фильтр tojson
для создания JSON. Он не будет содержать запятую.
Я бы передал готовые словари с произведением двух списков:
uri_per_metric = [{'met': m, 'uri': u} for u in uri for m in metric_value]
и в шаблоне просто используйте
{{ uri_per_metric|tojson(indent=4) }}
Демо-версия:
>>> 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('''\
... <script type="text/javascript">
... data = {{ uri_per_metric|tojson(indent=4) }};
... </script>
... ''')
>>> payload = template.render(uri_per_metric=uri_per_metric)
>>> print(payload)
<script type="text/javascript">
data = [
{
"met": 1024,
"uri": "example1.com"
},
{
"met": 2048,
"uri": "example1.com"
},
{
"met": 1024,
"uri": "example2.com"
},
{
"met": 2048,
"uri": "example2.com"
}
];
</script>
Конечно, если вы создаете ответ application/json
(возвращающий только данные JSON из веб-конечной точки), и это не является частью большого шаблона, тогда вообще используйте шаблон 1023 * было бы плохой идеей. В этом случае используйте выделенную поддержку JSON, которую может иметь ваша веб-инфраструктура, такую как метод фабрики ответов jsonify()
Flask , или создайте вывод с помощью json.dumps()
напрямую.