YAML中的字符串插值

Cli*_*ton 9 yaml string-interpolation template-variables

在Perl中,我可以执行以下操作:

my $home = "/home";
my $alice = "$home/alice";
Run Code Online (Sandbox Code Playgroud)

我可以在YAML中执行以下操作:

Home: /home
Alice: $Home/alice
Run Code Online (Sandbox Code Playgroud)

那么"爱丽丝" /home/alice到底有效吗?

zw9*_*963 8

您应该使用ERB模板.

你可以这样写:

Alice: <%=home%>/alice
Run Code Online (Sandbox Code Playgroud)

使用时,home在解析为YAML之前,需要使用ERB 解析值.如果home是局部变量,则需要在#result方法的参数中传递本地绑定.如果你没有通过这个,将使用TOP LEVEL绑定作为默认值.

像这样:

require 'erb'

home = 'home'
YAML.load(ERB.new(yaml_content).result(binding))
Run Code Online (Sandbox Code Playgroud)


Kil*_*els 8

我最近也在为 Python 寻找这个dynamic-yaml包,并通过 Github 上的 Awesome YAML 存储库偶然发现了这个包。

链接 Awesome YAML Github 存储库:https://github.com/dreftymac/awesome-yaml#parsers 链接 Python 的动态 YAML:https://github.com/childsish/dynamic-yaml

希望这可以帮助!

编辑:由于评论是正确的并且链接可能会损坏,因此这里是一个简单的示例:

如果您有一个如下所示的 YAML 文件:

house:
    street: cool_street_name
    number: 45
    street_and_number: {house.street}-{house.number}
Run Code Online (Sandbox Code Playgroud)

安装dynamic_yaml以python -m pip install dynamic_yaml运行以下脚本。

house:
    street: cool_street_name
    number: 45
    street_and_number: {house.street}-{house.number}
Run Code Online (Sandbox Code Playgroud)

然后你会得到:

import dynamic_yaml

with open(path_to_yaml_file, 'r') as f:
    data = dynamic_yaml.load(f)
Run Code Online (Sandbox Code Playgroud)


Pau*_*nti 7

不幸的是,你运气不好.要做你想做的事,你需要$home从视图文件(或任何地方)传入并在你的yaml条目中插入它,这可能看起来像:

Alice: ! '%{home}/Alice' 
Run Code Online (Sandbox Code Playgroud)

请参阅StackOverflow问答,以获得几乎完全正确的问题的详细答案.