因为近期工作需要,常常要将测试结果/数据统计、汇总和展示,因此会有写静态HTML的需求,本文记录下python写静态HTML的小技巧
灵感时来源于unittest测试框架最常用的报告插件: HTMLTestRunner ,该插件本身基于python2且已经更新了,好在 @虫师 一直在维护和更新这个插件,使得它能继续被大家所使用,了解详情请移步: SeldomQA/HTMLTestRunner
回到HTMLTestRunner报告插件,阅读源码发现,作者只用了一个python文件便巧妙的将写HTML、页面绘制和数据嵌入搞定了。进一步分析可以看到,作者先是在Template基类中定义了测试报告的HTML结构模板和各个模块/表格模板,然后再以格式化输入的形式给每一个模板中填充目标数据,再将填充好的模板以格式化输入的形式填充到HTML结构模板中,最后再将所有内容写成一个HTML文件即可。
可以看到,这样的设计其实优点在于非常小巧和轻量,缺点在于可维护和可移植性差,数据量小还尚可,不太适合大量数据的统计和绘制。
这种设计的关键在于建模板,然后 按需 填充数据,最后再写HTML,通常我的做法是:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/htmlcharset=utf-8" />
<title>溅</title>
<style>
<!--
body {
background:url(img/bg9.gif)
margin:0px
padding:0px
}
.pic{
border:1px solid #00406c
}
p {
padding-top:30px
color:#001671
}
p.con{
padding-left:4px
padding-right:4px
}
p.title {
paddin-top0px
}
.chara1 {
font-size:12px
background-color:#90bcff
}
.chara1 td{
text-align:center
}
.chara2 {
background-color:#d2e7ff
text-align:center
font-size:12px
vertical-align:top
}
.chara3 {
background:#e9fbff url(img/self.jpg) no-repeat bottom right
vertical-align:top
padding-top:15px
padding-left:30px
font-size:12pxpadding-right:15px
}
-->
</style>
</head>
<body>
<table align="center" cellpadding="1" cellspacing="0">
<tr><td><img src="img/banner3.jpg" border="0" /></td></tr>
</table>
<table width="600px" cellpadding="2" cellspacing="2" class="chara1" align="center">
<tr><td>首面</td><td>心情日记</td><td>Free</td><td>一起走到</td><td>从明天起</td><td>纸飞机</td><td>下一站</td></tr>
</table>
<table width="600px" align="center" cellpadding="0" cellspacing="1">
<tr>
<td width="150px" class="chara2"><p><img src="img/selfpic.jpg" class="pic"/><br />我的日记本</p>
<p class="con">他们彼此深信,是瞬间并发的热情让他们相遇。这样的确定是美丽的,但变幻无常更为美丽。</p>
<p><img src="img/selfpic2.jpg" class="pic"/><br/>心情轨迹</p>
<p class="con">董事长的一切都让人既羡慕又忌妒,但更让人受不了的是,有一天,上苍忽然赐给他一个神奇的礼物</p> </td>
<td class="chara3">
<h4>介绍</h4>
<p>我努力的抓紧世界,最后却仍被世界淘汰,如果一开始就松手,我会不那么伤心吗?你说,亲爱的孩子,世事难料,随它去吧!</p>
<h4>照相本子</h4>
<p>关于童年,你记住了什么? <br>
两岁时,我拥有一只巨大的粉红猪,它总在我嚎啕大哭时逗我笑。<br>
三岁时,我骑着小木马一路摇到外婆家,它不喝水也不吃草。<br>
四岁时,我离家出走,在公车上睡着了,最后是太空超人送我回家。<br>
我真的没骗你,我通通都记得,还有照片为证。
</p>
<h4>地下铁</h4>
<p>天使在地下铁的入口,<br>
和我说再见的那一年,<br>
我渐渐看不见了。<br>
十五岁生日的那年秋天早晨,<br>
窗外下着毛毛雨,<br>
我喂好我的猫。<br>
六点零五分,<br>
我走进地下铁。</p>
<h4>向左走向右走</h4>
<p>They're both convinced<br>
that a sudden passion joined them.<br>
Such certainth is beautiful,<br>
but uncertainty is more beautiful still.</p>
<br>
</td>
</tr>
</table>
</body>
</html>