Pebble模板HTML标签可见问题:如何正确逐行展示ownerList列表
解决Pebble模板输出HTML转义标签的问题
问题分析
你遇到的问题核心原因有两点:
- 模板中直接使用了HTML转义字符
<p>和</p>,Pebble会将这些字符作为普通文本输出,而非解析为HTML标签; - Java代码传入上下文的变量名为
ownerList,但模板里遍历的是ownersList,变量名不匹配(若这是笔误,需修正才能正常执行循环)。
解决方案
根据你期望的纯文本逐行输出需求,按以下步骤修改:
1. 修正模板文件(OwnerList.peb)
移除多余的转义标签,直接循环输出目标字段,让每个内容单独占一行:
{% for owner in ownerList %} {{ owner.dateTime }} {% endfor %}
2. 确认Java代码的变量名一致性
确保Java代码中传入的变量名和模板中遍历的变量名完全一致(你当前Java代码里的ownerList是正确的,模板里需要对应改成ownerList,而非ownersList):
PebbleEngine engine = new PebbleEngine.Builder().build(); PebbleTemplate compiledTemplate = engine.getTemplate("OwnerList.peb"); Map<String, Object> context = new HashMap<>(); context.put("ownerList", ownerList); // 变量名与模板保持一致 Writer writer = new StringWriter(); compiledTemplate.evaluate(writer, context); String output = writer.toString();
额外说明(若需输出可解析的HTML标签)
如果你的需求是输出能被浏览器解析的HTML标签而非纯文本,需将模板中的转义字符替换为实际HTML标签,并使用raw过滤器关闭Pebble的自动转义:
{% for owner in ownerList %} <p>{{ owner.dateTime|raw }}</p> {% endfor %}
此方案会生成HTML内容,浏览器渲染时会显示换行的文本,不会直接显示<p>标签。
内容的提问来源于stack exchange,提问作者sanyogita
相关产品推荐
相关产品推荐

