You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.14 13:44:32