Jinja2使用宏渲染时出现意外换行的问题求助
Jinja2使用宏渲染时出现意外换行的问题求助
我最近在用Jinja2渲染内容的时候碰到个棘手的小问题:调用宏输出内容时,总是会多出来一行不必要的换行,试了trim_blocks参数也没解决,想请教下大家有没有办法!
我的数据源
最开始我用YAML文件存数据:
names: - Bob - Jason - James
后来为了排查问题,直接在Python里定义了列表,结果还是一样的问题:
names = ["Bob", "Jason", "James"]
我的Jinja2模板
模板里写了个简单的宏用来输出名字:
{% macro print_name(data)%} {{ data }} {% endmacro %} People { {% for name in names %} Name { {{ print_name(name) }} } {% endfor %} }
渲染用的Python代码
我已经在Environment里设置了trim_blocks=True和lstrip_blocks=True,本来以为能去掉多余的换行,结果完全没效果:
import yaml from jinja2 import Environment, FileSystemLoader def main(): # 两种数据源的写法我都试了,结果一致 # data = yaml.load(open('config_files/test.yml'), Loader=yaml.FullLoader) names = ["Bob", "Jason", "James"] env = Environment(loader = FileSystemLoader('.'), trim_blocks=True, lstrip_blocks=True) template = env.get_template('templates/test.j2') print(template.render(names=names)) if __name__ == '__main__': main()
期望的输出
我希望渲染后的结果是这样的:
People { Name { Bob } Name { Jason } Name { James } }
实际的输出
但实际渲染出来的结果里,每个名字后面都多了一行空行:
People { Name { Bob } Name { Jason } Name { James } }
我试过的无效方法
我尝试在宏调用的地方加-来消除换行,也就是写成{{ print_name(name) -}},结果更糟——直接破坏了下一行的缩进:
People { Name { Bob } Name { Jason } Name { James } }
有没有大佬知道该怎么解决这个问题呀?
备注:内容来源于stack exchange,提问作者sshaun_10
相关产品推荐
相关产品推荐

