指定自定义上下文

时间:2016-08-25 10:56:46

标签: python cookiecutter

我们有文件cookiecutter.json,它定义了模板的默认上下文。我想通过命令标志指定类似的东西:

cookiecutter --no-input --context my-context.json <cookiecutter-template>

这样可以使用相同的模板生成不同的项目,而无需在输入提示上手动输入数据。有一种解决方法可以实现这一目标:

  1. 在本地克隆模板仓库
  2. 修改模板仓库中的cookiecutter.json
  3. 将本地克隆指定为模板,而不是github clone
  4. 这不太理想,因为它需要修改存储库,不允许独立存储上下文文件,并且不允许使用相同的模板来轻松创建不同的项目。

    有没有办法在命令行上为cookiecutter指定上下文?

1 个答案:

答案 0 :(得分:0)

否(不完全)

从我所看到的,目前没有按照你希望的方式使用命令行标志的方法。

然而,基于我对这个完全相同问题的研究,有两种主要途径可以解决这个问题,每种方法或多或少都适合具体情况。

标准/个人背景值

如果您希望在多个项目中使用标准的,通常是个人的上下文值,则可以选择添加用户特定的配置。

您似乎可以在主目录中的.cookiecutterrc文件中指定一些默认上下文设置。 (可以找到当前文档here)。这最适用于电子邮件地址,全名,github帐户名等相当静态的内容。

配置文件的格式为yaml,示例结构如下:

default_context:
    full_name: "Gavin Cooper"
    email: "xxxxxx@xxxxx.com"
    github_username: "gjcooper"

我认为这依赖于诸如此类字段在大多数cookiecutter包中被赋予标准名称。

项目特定上下文值

此解决方案适用于您希望将项目特定值(即app_name)生成为cookiecutter json格式的项目管理软件或其他脚本,然后在没有用户输入的情况下自动生成项目目录结构。

这需要编写一个非常短的python脚本来挂钩cookiecutter内部,但是使用起来很简单:

from cookiecutter.main import cookiecutter
import json

with open('project_context.json') as jfile:
    mycontext = json.load(jfile)

cookiecutter('<local or remote cookiecutter template file>',
             extra_context=mycontext,
             no_input=True)

我能验证的这个解决方案对我有用。