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

如何在嵌套目录中两次运行Cookiecutter?现有结构执行遇阻

两级Cookiecutter模板分阶段渲染的可行方案

核心思路

借助Cookiecutter的后置钩子(post-gen-project),在第一次渲染外层模板(生成project_slug命名的目录)完成后,自动触发第二次Cookiecutter渲染,处理内层的package_type变量,实现分阶段填充模板的需求。

具体操作步骤

1. 调整外层模板结构

在外层folder1目录下新增钩子目录及脚本文件:

/folder1
   /{{cookiecutter.project_slug}}
       /src
          /{{cookiecutter.project_slug}}{{cookiecutter.package_type}}
               test.py
               main.py
       README.md
       cookiecutter.json
   cookiecutter.json
   /hooks
       post-gen-project.py  # 新增后置钩子脚本

2. 编写后置钩子脚本

post-gen-project.py负责触发第二次渲染,代码如下:

import os
import subprocess
import sys

# 获取第一次渲染生成的项目目录路径
project_dir = os.path.join(os.getcwd(), "{{cookiecutter.project_slug}}")
os.chdir(project_dir)

# 运行第二次Cookiecutter渲染,指定当前目录为模板源
result = subprocess.run(
    [sys.executable, "-m", "cookiecutter", ".", "--no-input"],
    capture_output=True,
    text=True
)

# 错误处理
if result.returncode != 0:
    print("第二次渲染失败:", result.stderr)
    sys.exit(1)

# 可选:删除内层的cookiecutter.json,避免后续误操作
os.remove("cookiecutter.json")

3. 修正JSON语法错误

你的两个cookiecutter.json使用了=赋值,不符合JSON规范,必须改为::

  • 外层folder1/cookiecutter.json修正后:
{ 
   "project_slug": "project name"
}
  • 内层{{cookiecutter.project_slug}}/cookiecutter.json修正后:
{
  "package_type": "regular"
}

4. 执行渲染

直接运行外层模板即可自动完成两次渲染:

cookiecutter /path/to/folder1

如果需要交互式输入package_type,删除钩子脚本中的--no-input参数即可。

补充说明

  • Linux/macOS环境下需给钩子脚本添加可执行权限:chmod +x hooks/post-gen-project.py,Windows无需额外设置。
  • 内层的cookiecutter.json在第二次渲染后可根据需求保留或删除。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.27 18:05:00