我应该如何使用 cookiecutter 整齐地渲染 YAML 数组?
How should I render YAML arrays neatly with cookiecutter?
我有一个 cookiecutter 模板,我想根据一些选项呈现 YAML 文件。
举个简单的例子,假设呈现的 YAML 文件可能如下所示:
supported_databases:
- mysql
- postgres
我的千篇一律 JSON 看起来像这样:
{
"mysql": ["yes", "no"],
"postgres": ["yes", "no"]
}
我的 YAML 文件将充满 if
s 以支持所有 4 种有效组合:
{%- if cookiecutter.mysql == 'yes' or cookiecutter.postgres == 'yes' %}
supported_databases:
{%- if cookiecutter.mysql == 'yes' %}
- mysql
{%- endif %}
{%- if cookiecutter.mysql == 'yes' %}
- postgres
{%- endif %}
{%- endif %}
需要外部 if
以防止在两个选项均为 'no' 的情况下呈现无效的 YAML。
有没有更简洁的方法来完成此操作?
感谢您的帮助。
您可以利用 YAML 的流样式:
supported_databases: [
{% for db_type in ['mysql', 'postgres'] %}
{% if cookiecutter[db_type] == 'yes' %}{{ db_type }},{% endif %}
{% endfor %}
]
如果两个选项都是 no
,则呈现:
supported_databases: [
]
哪个是有效的 YAML,表示一个空序列作为 supported_databases
的值。
同时提供这两个选项,您将得到
supported_databases: [
mysql,
postgres,
]
这也是有效的 YAML,因为与 JSON 不同,YAML 允许在序列中使用尾随逗号。此 YAML 在语义上等同于您在问题中显示的 YAML。
注意:代码未经测试。
我有一个 cookiecutter 模板,我想根据一些选项呈现 YAML 文件。
举个简单的例子,假设呈现的 YAML 文件可能如下所示:
supported_databases:
- mysql
- postgres
我的千篇一律 JSON 看起来像这样:
{
"mysql": ["yes", "no"],
"postgres": ["yes", "no"]
}
我的 YAML 文件将充满 if
s 以支持所有 4 种有效组合:
{%- if cookiecutter.mysql == 'yes' or cookiecutter.postgres == 'yes' %}
supported_databases:
{%- if cookiecutter.mysql == 'yes' %}
- mysql
{%- endif %}
{%- if cookiecutter.mysql == 'yes' %}
- postgres
{%- endif %}
{%- endif %}
需要外部 if
以防止在两个选项均为 'no' 的情况下呈现无效的 YAML。
有没有更简洁的方法来完成此操作?
感谢您的帮助。
您可以利用 YAML 的流样式:
supported_databases: [
{% for db_type in ['mysql', 'postgres'] %}
{% if cookiecutter[db_type] == 'yes' %}{{ db_type }},{% endif %}
{% endfor %}
]
如果两个选项都是 no
,则呈现:
supported_databases: [
]
哪个是有效的 YAML,表示一个空序列作为 supported_databases
的值。
同时提供这两个选项,您将得到
supported_databases: [
mysql,
postgres,
]
这也是有效的 YAML,因为与 JSON 不同,YAML 允许在序列中使用尾随逗号。此 YAML 在语义上等同于您在问题中显示的 YAML。
注意:代码未经测试。