我有一个我试图格式化的字符串,如下所示:
output = """<div class="form-group" id="$info["id"]_container">"""
格式化调用如下所示:
Template(output).substitute(locals())
我的问题是替换是有效的,但它替换了info数组的所有值而不是我想要的id值。
这是输出:
<div class="form-group" id="{'name': 'my_name', 'type': 'my_type', 'label': 'my_label', 'help_text': 'my_help_text', 'id': 'my_id', 'placeholder': 'my_placeholder', 'class': 'my_class'}["id"]_container">
这是我想要的输出:
<div class="form-group" id="my_id_container">
我已尝试使用{$info["id"]}
,它只是将其视为字符串的一部分,并且没有替代品。我也试过${$info["id"]}
,它给出了:
ValueError: Invalid placeholder in string: line 1, col 51
我真的想在不使用%s
语法的情况下完成此操作。这可能吗?
供参考,以下是所有代码:
info = {
"type" : "my_type",
"name" : "my_name",
"id" : "my_id",
"class" : "my_class",
"label" : "my_label",
"placeholder" : "my_placeholder",
"help_text" : "my_help_text"
}
output = """<div class="form-group" id="$info["id"]_container">"""
output_sub = Template(output).substitute(locals())
答案 0 :(得分:1)
我建议使用新的.format()
字符串格式化语法:
output = """<div class="form-group" id="{info_id}_container">""".format(info_id=info['id'])
甚至:
info = {'id': 'my_id'}
output = """<div class="form-group" id="{id}_container">""".format(**info)
答案 1 :(得分:1)
您的代码中有一个名为info
的词典,因此您将$info
替换为{1}},因为info
中的键locals()
的值是该词典,如果您想要使用info中的值只需使用info dict:
使用:
print(string.Template(output).substitute(**info))
<div class="form-group" id="id["id"]_container">
或者:
output = """<div class="form-group" id="$id["id"]_container">"""
print(string.Template(output).substitute(info))
In [3]: info = {'name': 'name', 'type': 'type', 'label': 'label', 'help_text': 'help_text', 'id': 'id', 'placeholder': 'placeholder', 'class': 'class'}
In [4]: locals()["info"] # what your code is accessing
Out[4]:
{'class': 'class',
'help_text': 'help_text',
'id': 'id',
'label': 'label',
'name': 'name',
'placeholder': 'placeholder',
'type': 'type'}
答案 2 :(得分:1)
由于Template
中的关键字无法成为表达式,因此您无法使用info["id"]
之类的关键字:
如果你想使用Template
,你需要一个输出:
output = """<div class="form-group" id="${info}_container">"""
但从其他方面来说,您可以使用format
或%s
。
>>> output = """<div class="form-group" id="${info}_container">"""
>>> print string.Template(output).substitute(info=info["id"])
<div class="form-group" id="id_container">