如何在Python的string.format()中使用JSON对象填充HTML模板?
问题分析与解决方案
你遇到的问题是因为Python的str.format()方法不支持用点语法({links.one})访问字典的键——你传入的links是一个Python字典,而不是拥有属性的类实例,所以模板里的links.one无法被正确解析。
另外先提个小细节:你的JSON文件最后一个键值对末尾多了个逗号("two" : "www.two.com", }),部分JSON解析器会因此报错,建议先修正为:
{ "links" : { "one" : "www.one.com", "two" : "www.two.com" } }
下面给你两种可行的解决方法:
方法一:修改模板语法,适配字典索引
保持原有Python代码不变,把HTML模板里的{links.one}改成字典索引的写法:
... <a href={links['one']}></a> ...
这样str.format()就能正确识别并从links字典中取出对应的值了。
方法二:拆包字典,简化模板写法
这种方法更简洁,推荐使用。修改Python代码,用**操作符把jsonData['links']字典拆包为关键字参数,模板里直接用键名引用即可:
import json with open('./jsonInp.json') as jsonFile: jsonData = json.load(jsonFile) with open('brandedTemplate.html', 'r') as inp_f: # 读取文件用r模式足够,无需r+ htmlInp = inp_f.read().format(**jsonData['links'])
对应的HTML模板可以简化为:
... <a href={one}></a> ... ... <a href={two}></a> ...
额外提醒:打开文件时尽量都用with语句(你已经给第一个文件用了,第二个也建议跟上),它会自动管理文件句柄,避免资源泄漏。
内容的提问来源于stack exchange,提问作者chunkybyte
相关产品推荐
相关产品推荐

