如何让Jinja2移除标签生成的换行/空格,保留静态文本原格式
解决Jinja2模板保留静态文本格式的通用方案
问题描述
使用常规Jinja2条件模板时,{%- %}的空白修剪语法会误删X/Y内容的末尾换行、空格,尤其是当X/Y包含多行和末尾空行时,无法完全保留原始格式。需要一种通用模板结构,让标签与静态文本各占一行,无需随静态文本内容修改调整模板语法,确保:
- flag=0时,A与B之间插入X,保留所有格式
- flag=1时,A与B之间插入Y,保留所有格式(包括Y的末尾空行)
- flag=2时,A与B直接相连,仅保留一个换行分隔
通用解决方案
使用精准的空白控制语法,仅修剪条件标签之间的冗余空白,完全保留静态文本的所有格式:
A {%- if flag == "0" %} X {%- elif flag == "1" %} Y {% endif %} B
方案说明
{%- if ... %}与{%- elif ... %}中的{%-:修剪条件标签左侧的冗余空白,避免条件不匹配时A与B之间出现多余空行- 不使用
{%- endif %}:保留{% endif %}左侧的空白,确保X/Y的末尾换行(包括空行)完全保留 - 所有静态文本(A、B、X、Y)单独占行,无需调整格式即可直接插入模板,完全保留原始换行、空格
测试验证
以包含末尾空行的Y为例,模板如下:
a {%- if flag == "0" %} x {%- elif flag == "1" %} y y {% endif %} b
- flag=1时输出(保留Y的末尾空行):
a y y b - flag=2时输出(A与B仅一个换行分隔):
a b
内容的提问来源于stack exchange,提问作者flonk
相关产品推荐
相关产品推荐

