来自 cookiecutter 的Troubleshooting 文档(或来自底层Jinja 模板文档),以防止 cookiecutter 错误地解析大括号{
或{{
模板:
确保你正确地逃避事情,像这样:
{{ "{{" }}
或这个:
{{ {{ url_for('home') }} }}
有关更多信息,请参阅http://jinja.pocoo.org/docs/templates/#escaping。
如果模板是这样的:
marker = '{{'
print('{{RequestId:{0}, ')
print('The value should be in braces {{{cookiecutter.value}}}')
大括号需要像这样转义:
marker = '{{ "{{" }}'
print('{{ "{{" }}RequestId:{0}, ')
print('The value should in braces {{ "{" }}{{cookiecutter.value}}{{ "}" }}')
以便它正确生成:
$ cat template/\{\{\ cookiecutter.project_name\ \}\}/test.py
marker = '{{ "{{" }}'
print('{{ "{{" }}RequestId:{0}, ')
print('The value should in braces {{ "{" }}{{cookiecutter.value}}{{ "}" }}')
$ cookiecutter template
project_name [myproject]:
value [the_value]: 123456
$ cat myproject/test.py
marker = '{{'
print('{{RequestId:{0}, ')
print('The value should in braces {123456}')
{
另一种选择是,您可以告诉 cookiecutter 跳过整个test.py 文件,方法是将其添加到Copy without Render列表(可从 cookiecutter 1.1+ 获得),而不是转义 test.py 中的每个文件:
为了避免渲染 cookiecutter 的目录和文件,可以在cookiecutter.json中使用_copy_without_render键。
{
"project_slug": "sample",
"_copy_without_render": [
"*.html",
"*not_rendered_dir",
"rendered_dir/not_rendered_file.ini"
]
}
在原始示例中,如果您只是模板化文件夹名称并且不更改 test.py 中的所有内容,那么 cookiecutter.json 应该是:
{
"project_name": "myproject",
"_copy_without_render": [
"test.py"
]
}