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

如何基于Cookiecutter模板变量向pyproject.toml按需添加Poetry源并规范空行?

最优实现:Cookiecutter模板中条件添加Poetry源并保证pyproject.toml格式整洁

问题的核心是Jinja2模板渲染时会保留条件标签前后的换行,导致生成的pyproject.toml出现多余空行。要解决这个问题,关键是利用Jinja2的空白控制语法,同时合理组织模板结构,确保各配置块之间始终只保留1个空行。

具体模板实现

修改你的pyproject.toml模板如下:

# pyproject.toml

...

[[tool.poetry.source]]
name = "internal_repo1"
url = "https://internal_repo1/simple"
default = true
{%- if cookiecutter.use_internal_repo == "Yes" %}

[[tool.poetry.source]]
name = "internal_repo"
url = "https://internal_repo/simple"
default = true
{%- endif %}

[build-system]
requires = ["poetry-core>=1.0.0"]
build-backend = "poetry.core.masonry.api"

实现原理

  1. 空白控制标签:使用{%- if ... -%}和{%- endif -%}(标签内侧的减号),会自动吃掉标签前后的多余换行,避免因条件不满足时产生空行堆积。
  2. 空行精准控制:在{%- if %}标签后添加一个换行,确保当用户选择"Yes"时,新添加的源块和前面的源块之间保留1个空行;条件结束标签的空白控制则保证无论条件是否满足,最终和[build-system]块之间都只有1个空行。

验证效果

  • 当用户选择"Yes"时,生成的文件结构:
# pyproject.toml

...

[[tool.poetry.source]]
name = "internal_repo1"
url = "https://internal_repo1/simple"
default = true

[[tool.poetry.source]]
name = "internal_repo"
url = "https://internal_repo/simple"
default = true

[build-system]
requires = ["poetry-core>=1.0.0"]
build-backend = "poetry.core.masonry.api"
  • 当用户选择"No"时,生成的文件结构:
# pyproject.toml

...

[[tool.poetry.source]]
name = "internal_repo1"
url = "https://internal_repo1/simple"
default = true

[build-system]
requires = ["poetry-core>=1.0.0"]
build-backend = "poetry.core.masonry.api"

两种场景下,所有配置块之间都严格保留1个空行,符合需求。

内容的提问来源于stack exchange,提问作者Andi

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.21 00:24:19