Cookiecutter.json是否支持表达式?含条件表达式实现疑问
问题场景
在cookiecutter.json中编写如下配置时触发语法错误:
{ "herp": ["aaa", "bbb"], "derp": "{{ if cookiecutter.herp == 'aaa': return 'some_other_value'}}" }
错误信息:
jinja2.exceptions.TemplateSyntaxError: expected token 'end of print statement', got 'cookiecutter'
但类似"my_id": "{{ cookiecutter.my_name.lower().replace(' ', '-') }}"的表达式能正常运行。用户有两个疑问:
{{}}中是否支持更复杂的表达式?- 是否支持条件表达式?另外用户已验证字典查找的方式可行:
"_my_dict": {"aaa":"sdfsdf", "bbb":"werwerwe"}, "derp": "{{cookiecutter._my_dict[cookiecutter.herp]}}",
解答
1. 复杂表达式的支持情况
完全支持。Cookiecutter基于Jinja2引擎,{{}}内可以使用所有Jinja2合法表达式,包括但不限于:
- 字符串操作(如
lower()、replace()) - 字典/列表的索引查找
- 三元表达式
- 内置函数调用
2. 条件表达式的正确用法
注意:{{}}内只能放表达式,不能放控制语句(比如if语句块),你之前写的if ... return ...属于语句范畴,所以会报错。
实现条件判断可以用Jinja2的三元表达式,语法如下:
{ "herp": ["aaa", "bbb"], "derp": "{{ 'some_other_value' if cookiecutter.herp == 'aaa' else '默认值' }}" }
另外你发现的字典映射方式非常适合多分支场景,比嵌套三元表达式更简洁易维护,推荐使用。
内容的提问来源于stack exchange,提问作者red888
相关产品推荐
相关产品推荐

