我正在编写一个使用yaml配置文件渲染json模板的函数。
看起来如下所示:
render.py
:
if len(sys.argv) != 3:
print "usage: python render_template.py [yaml_file] [jinja_template_file]"
sys.exit(1)
with open(sys.argv[1], "r") as stream:
config = yaml.safe_load(stream)
with open(sys.argv[2], "r") as stream:
template_text = stream.read()
template = Template(template_text)
print template.render(config)
test.yaml
:
Application:
Hosts:
- a
- b
sample.json.templete
[{
"test1":
{
"objectName": "{{Application.Hosts}}",
}
}]
当我跑
时 python ./render.py ./test.yaml ./sample.json.templete > sample.json
我得到了
[{
"test1":
{
"objectName": ['a' , 'b'],
}
}]
但由于我正在生成一个json文件,我需要
["a", "b"]
即。我希望列表用双引号。我如何最好地实现它?如何将带有单引号字符串的列表转换为带双引号字符串的列表?
答案 0 :(得分:0)
您可以在模板中使用自定义过滤器功能,以您希望的方式格式化列表。然后,您可以将此功能用于要格式化的任何列表。
一个很好的SO问题/答案,其中包含一些有关创建jinja2过滤器以便与可迭代使用的精彩信息(例如您的列表)is available here
然后你的json模板可以像这样使用过滤器:
"objectName": "{{ Application.Hosts|format_list }}",
您的过滤器很可能会执行以下操作:
def format_list(my_list):
formatted_list = ", ".join(["%s" % item for item in my_list])
return "[%s]" % formatted_list
答案 1 :(得分:0)
这样可行
["{{Application.Hosts|join('","')}}"]
我们不需要制作任何自定义过滤器