首页 > 解决方案 > 在 Jinjava 中渲染一个循环?

问题描述

我正在使用 jinjava 编写一个 java 应用程序。问题是,模板中有一个循环。

是否可以在 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 Methode 是这样的:

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 更好的引擎,请告诉我。

标签: template-enginetemplatingjinjava

解决方案


推荐阅读