рендерить цикл в Jinjava?
Я программирую Java-приложение с помощью jinjava. Проблема в том, что в шаблоне есть петля.
Можно ли отобразить шаблон с циклом в jinjava.
Вот шаблон и контекст, которые я получаю от клиента в виде файла json.
Шаблон:
[
{%- for scheme in context -%}{%- if loop.index>1 %},{%endif-%}
{
"nr": "V01 {{scheme.schemekrz}}",
"photo": null,
"text": ["{{scheme.schemename}}",
"{{scheme.article}}",
"{{scheme.article}}(<u>{{scheme.articlenr}}</u>,{{scheme.articlename}},{{scheme.price}})",
"{{scheme.schemeerl}}",
"Some Text {{scheme.articlename}}Some Text {{scheme.artikel}}({{scheme.articlename}})",
"Some Text"
],
"Issue": {
"text": ["Some Text",
"{{scheme.articlename}}, ({{scheme.price}})"
],
"nr":0,
"options": [],
"photo": null
},
"title": "SQLTuning ..."
}
{%- endfor -%}
]
Контекст:
[
{
"schemanr" : "2",
"schemekrz" : "Product",
"schemename" : "Product BM",
"schemeerl" : "path",
"article" : "Product BMA",
"articlenr" : "45",
"articlename" : "Test",
"price" : "30"
},
{
"schemanr" : "1",
"schemekrz" : "Product",
"schemename" : "Product VD",
"schemeerl" : "path",
"article" : "Product VDF",
"articlenr" : "22",
"articlename" : "Test 3",
"price" : "8"
}
...
]
Java-метод, который я использовал, выглядит так:
public void templating() throws Exception {
File contextPath = new File("article _1_to_8.json");
File output = new File("output.json");
PrintWriter out1 = null;
try {
Jinjava jinjava = new Jinjava();
ObjectMapper mapper = new ObjectMapper();
List<Map<String, Object>> list = mapper.readValue(contextPath,
new TypeReference<List<Map<String, Object>>>() {
});
String template = new String(Files.readAllBytes(Paths.get("templateFile.json")));
/*
not working
String renderedTemplate = "";
for (Map<String, ?> context : list) {
renderedTemplate += jinjava.render(template, context);
}*/
String renderedTemplate = jinjava.render(template, list.get(0));
out1 = new PrintWriter(new FileWriter(output));
out1.write(renderedTemplate);
} catch (Exception e) {
e.printStackTrace();
}
}
Если вы знаете более подходящий движок, например jinjava, для такой задачи, дайте мне знать, пожалуйста.