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到底有效吗?
您应该使用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)
我最近也在为 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)
不幸的是,你运气不好.要做你想做的事,你需要$home从视图文件(或任何地方)传入并在你的yaml条目中插入它,这可能看起来像:
Alice: ! '%{home}/Alice'
Run Code Online (Sandbox Code Playgroud)
请参阅StackOverflow问答,以获得几乎完全正确的问题的详细答案.
| 归档时间: |
|
| 查看次数: |
19883 次 |
| 最近记录: |