在SXA中使用Scriban生成HTML出现大量空白,如何进行格式化处理?
SXA Scriban模板生成HTML多余空白的解决方法
方案1:使用Scriban原生空白控制语法(推荐,无需额外配置)
Scriban模板本身支持通过语法符-裁剪标签前后的空白、换行符:
- 给模板标签左侧加
-,即{{- 表达式:裁剪表达式左侧所有空白换行 - 给模板标签右侧加
-,即表达式 -}}:裁剪表达式右侧所有空白换行
示例
原有生成多余空白的模板写法:
<div id="dv1"> {{ if 你的判断条件 }} <div id="dv2">内容</div> {{ end }} </div>
修改为带空白控制的写法即可解决空白问题:
<div id="dv1"> {{- if 你的判断条件 -}} <div id="dv2">内容</div> {{- end -}} </div>
方案2:开启SXA内置HTML压缩功能
SXA自带全局HTML压缩模块,无需修改模板即可自动清理输出HTML的多余空白:
- 打开Sitecore内容编辑器,定位到你的SXA站点根节点下的Settings项
- 找到HTML Minification配置分组
- 勾选Enable HTML minification选项后保存即可
该功能会自动跳过pre、textarea等保留空白的标签,不会破坏原有内容格式。
方案3:自定义格式化处理(适用于需要自定义缩进等特殊场景)
如果需要对生成的HTML做自定义格式化(比如统一缩进对齐,而非仅压缩),可以在mvc.renderRendering管道中新增自定义处理器,拿到渲染输出的HTML字符串后,通过AngleSharp等HTML解析库完成格式化后再输出。
补充小技巧
如果仅需要处理局部内容的空白,可以通过Scriban的capture捕获内容后调用strip过滤器处理:
{% capture dv_content %} <div id="dv1"> <div id="dv2">内容</div> </div> {% endcapture %} {{ dv_content | strip }}
strip过滤器会自动删除内容首尾的所有空白换行,同时将中间的连续空白合并为单个空格。
内容的提问来源于stack exchange,提问作者user1534066
相关产品推荐
相关产品推荐

