Python 序列化数据为HTML,序列化的最后一个示例将展示创建HMTL文档的复杂性。这种复杂性来自我们期望提供包含大量上下文信息的完整Web页面。解决该HTML问题的一个方法如下:
import string
data_page = string.Template("""\
<html>
<head><title>Series {title}</title></head>
<body>
<h1>Series{title}</h1>
<table>
<thead><tr><td>x</td><td>y</td></tr></thead>
<tbody>
${rows}
</tbody>
</table>
</body>
</html>
""")
@to_bytes
def serialize_html(series: str, data: List[Pair]) -> str:
"""
>>> data = [Pair(2,3), Pair(5,7)]
>>> serialize_html("test", data) #doctest: +ELLIPSIS
b'<html>...<tr><td>2</td><td>3</td></tr>\\n<tr><td>5</td><td>7</td></tr>...
"""
text = data_page.substitute(
title=series,
rows="\n".join(
"<tr><td>{0.x}</td><td>{0.y}</td></tr>".format(row)
for row in data)
)
return text
该序列化函数包含两部分。第一部分是一个包含基本HTML页面的string.Template()
函数。它有两个占位符,使得数据能插入文档中。方法${title}
指示了可以插入标题信息的位置,而方法${rows}
则指示了可以插入数据行的位置。
该函数使用简单的格式化字符串创建各个数据行。它们拼接成一个更长的字符串,然后被替换至模板中。
虽然对于上述示例这种简单情况是可行的,但是对于更复杂的生成数据集来说就不太理想了。有许多更复杂的模板工具可用于创建HTML页面,它们大都具备在模板中嵌入循环,以及分离初始序列化函数等功能。更多选择见https://wiki.python.org/moin/Templating.