如何在Jinja模板中移除循环或文件末尾的多余尾随换行符?
可尝试的解决方案
1. 用Jinja内置的空白控制符调整模板
在模板的Jinja语法块首尾添加-符号,可主动移除对应方向的空白字符,修改你的循环模板为以下形式即可消除末尾多余换行:
{% for item in items %} * Some markdown with the {{ item }} {%- endfor %}
其中{%- endfor里的减号会直接移除endfor标签左侧的所有连续空白,包括最后一次循环结束后产生的换行。如果需要更严格的空白控制,也可以给循环开头也加上减号:
{% for item in items -%} * Some markdown with the {{ item }} {%- endfor %}
2. 渲染完成后直接处理输出字符串(最稳妥)
不对模板做任何修改,在拿到渲染结果后直接清除末尾的多余换行,该方式不会影响其他模板的渲染逻辑,可控性最高:
# 渲染后调用rstrip仅移除末尾的换行符 render_result = template.render(items=your_items).rstrip('\n')
如果需要保留最多1个末尾换行,也可以调整为.rstrip('\n') + '\n',完全可以按需自定义。
3. 新增Environment配置项
如果你使用的是Jinja 2.7+版本,可以在环境初始化时添加keep_trailing_newline=False参数,强制移除所有模板渲染后末尾的换行:
env = Environment( loader=FileSystemLoader(templates_dir), autoescape=select_autoescape(['md']), trim_blocks=True, lstrip_blocks=True, keep_trailing_newline=False )
注意该配置会全局生效,如果其他模板需要保留末尾换行就不推荐使用该方案。
内容的提问来源于stack exchange,提问作者planetp
相关产品推荐
相关产品推荐

