Python 有没有好办法批量替换 html 模板中的变量生成 html 文件

2017-12-06 11:28:55 +08:00
 qile1

如题,我试着使用 Template 无法实现

htmlstr="""
<html><head><body>
<input type="text" id="Index_000003_Spec_0001"  name="Index_000003_Spec_0001" class="text" dtype="Integer" require="false" dmsg="" />
<input type="text" id="Index_000003_Spec_0002"  name="Index_000003_Spec_0002" class="text" dtype="Integer" require="false" dmsg="" />
<input type="text" id="Index_000003_Spec_0003"  name="Index_000003_Spec_0003" class="text" dtype="Integer" require="false" dmsg="" />
<input type="text" id="Index_000003_Spec_0004"  name="Index_000003_Spec_0004" class="text" dtype="Integer" require="false" dmsg="" />
 <input type="text" id="Index_000004_Spec_0001"  name="Index_000004_Spec_0001" class="text" dtype="Integer" require="false" dmsg="" />
<input type="text" id="Index_000004_Spec_0002"  name="Index_000004_Spec_0002" class="text" dtype="Integer" require="false" dmsg="" />
<input type="text" id="Index_000004_Spec_0003"  name="Index_000004_Spec_0003" class="text" dtype="Integer" require="false" dmsg="" />
<input type="text" id="Index_000004_Spec_0004"  name="Index_000004_Spec_0004" class="text" dtype="Integer" require="false" dmsg="" />
<!--.....200 个输入项......-->
<input type="text" id="Index_000004_Spec_0002"  name="Index_000014_Spec_0002" class="text" dtype="Integer" require="false" dmsg="" />
<input type="text" id="Index_000004_Spec_0003"  name="Index_000014_Spec_0003" class="text" dtype="Integer" require="false" dmsg="" />
<input type="text" id="Index_000004_Spec_0004"  name="Index_000014_Spec_0004" class="text" dtype="Integer" require="false" dmsg="" />
<script type="text/javascript" src="http://ajax.aspnetcdn.com/ajax/jQuery/jquery-3.1.1.min.js"></script>
<script type="text/javascript">
$("input[type=text]").prop("readonly",true);
$('#Index_000003_Spec_0001').val('$value1');$('#Index_000003_Spec_0002').val('$value2');$('#Index_000003_Spec_0003').val('$value3');$('#Index_000003_Spec_0004').val('$value4');$('#Index_000004_Spec_0001').val('$value5');$('#Index_000004_Spec_0002').val('$value6');$('#Index_000004_Spec_0003').val('$value7');$('#Index_000004_Spec_0004').val('$value8');
//
$('#Index_000014_Spec_0002').val('$value201');$('#Index_000014_Spec_0003').val('$value202');$('#Index_000014_Spec_0004').val('$value203');
</script>
</body></html>"""

value1,value2,value3,value4,value5,value6,value7,value8=63,"ret",67,67,356,4,445,26
from string import Template
htmlstr.substitute(value1,value2,value3,value4,value5,value6,value7,value8)
print(htmlstr)
htmlfile = open(("outfile.html"), "w")
htmlfile.write(htmlstr)
htmlfile.close()

报这个错

AttributeError: 'str' object has no attribute 'substitute':

使用直接赋值也不对,200 多个值一个个赋值实在有些繁琐

htmlstr.substitute(value1=211,value2=421)

3489 次点击
所在节点    Python
5 条回复
qs
2017-12-06 11:54:27 +08:00
看看 jinja2 符不符合你的需求
SP00F
2017-12-06 12:13:48 +08:00
tornado 的 template

参考官方示例:
t = template.Template("<html>{{ myvalue }}</html>")

print(t.generate(myvalue="XXX"))


http://www.tornadoweb.org/en/stable/template.html
xiqingongzi
2017-12-06 12:22:40 +08:00
xpresslink
2017-12-06 22:40:17 +08:00
python 的很多 web 框架都有模板系统
也有很多独立的第三方模板。
比如 jinja2, mako, cheatah

其实个人推荐直接用 bottle 带的那个模板引擎。因为 bottle 就一个文件
那个模板语法完全是 Python 脚本包了一层,一看就会了。
qile1
2017-12-07 09:34:16 +08:00
谢谢楼上各位回帖,已经直接 template 传入字典列表直接安全替换就可以

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/412406

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX