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

Cookiecutter条件式提示与变量捕获问题求助

Cookiecutter交互式配置问题解决方案

问题分析

你遇到两个核心问题:

  • 条件子提示(AWS Dev账号ID)在所有主配置提示完成后才触发,不符合即时交互的预期
  • 钩子中捕获的变量无法同步到Cookiecutter上下文,导致模板渲染报错

解决方案

1. 实现即时条件提示

Cookiecutter的pre_gen_project.py是在所有主配置提示完成后才执行的,所以无法实现选完"DEV环境"后立即弹出子提示。要实现动态条件提示,需要使用hooks/prompt.py钩子(要求Cookiecutter版本 ≥1.7.0),这个钩子会在主提示流程中运行,可以插入自定义的条件交互。

2. 正确同步捕获的变量到Cookiecutter上下文

在Python钩子中不能使用模板语法{{ ... }}操作cookiecutter对象,要直接通过Python字典的方式修改cookiecutter变量,确保变量名和模板中引用的一致。


修改后的具体代码

1. 更新cookiecutter.json

移除原有的aws_dev_account_id模板引用,只保留基础配置:

{
    "project_name": "Short project name or application code",
    "project_slug": "{{ cookiecutter.project_name.lower().replace(' ', '-') }}",    
    "dev_account": ["yes", "no"],
    "tst_account": ["no", "yes"],
    "prd_account": ["no", "yes"],

    "__prompts__": {
        "project_name": "Select your project name:",
        "project_slug": "Select your project slug:",
        "dev_account": "[3/5] Setting up DEV environment?",
        "tst_account": "Setting up TST environment?",
        "prd_account": "Setting up PRD environment?"
    }
}

2. 创建/替换hooks/prompt.py

替换原有的pre_gen_project.py,用prompt.py实现条件提示:

import sys
from cookiecutter.main import read_user_variable

def main():
    # 获取已选择的DEV环境配置
    dev_selected = cookiecutter.get('dev_account')
    
    if dev_selected == "yes":
        # 即时弹出子提示
        aws_dev_account_id = read_user_variable(
            "\tDEV Account Id", 
            "What is your AWS Dev account's id?"
        )
        # 将捕获的值直接写入cookiecutter上下文
        cookiecutter['_aws_dev_account_id'] = aws_dev_account_id.strip()

if __name__ == "__main__":
    main()

3. 在模板中引用变量

如果需要在模板文件中使用该变量,直接用{{ cookiecutter._aws_dev_account_id }}即可,示例:

dev_account_id: {{ cookiecutter._aws_dev_account_id }}

关键点说明

  • prompt.py钩子会在主提示流程中执行,选完dev_account后会立即触发子提示
  • 直接通过cookiecutter['key'] = value的方式添加变量,无需使用模板语法
  • 确保变量名_aws_dev_account_id在钩子和模板中保持一致,避免未定义错误

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.08 23:57:04