dominate 简介
dominate是一个使用优雅的DOM API创建和操作HTML文档的Python库。使用它能非常简洁地编写纯Python的HTML页面,这消除了学习另一种模板语言的需要,利用Python更强大的特性。
首先安装依赖:
pip install dominate
1个简单的小例:
from dominate.tags import *h=html()
with h.add(body()).add(div(id=’content’)):
h1(‘Hello World!’)
p(‘This is my first html.’)
with table().add(tbody()):
l=tr()
l+=td(‘One’)
l.add(td(‘Two’))
with l:
td(‘Three’)
with open(‘test.html’,’w’) asf:
f.write(h.render())
生成的Html 源码 如下:
效果:
分解:
dominate 的最基本的特性为每个HTML标记构建了一个类。可以使用
from dominate.tags import *
导入所有html标记
Root element: html
Document metadata: head, title,base, link, meta, style,
Scripting: script, noscript
Sections: body, section, nav, article, aside,h1, h2, h3, h4, h5, h6, hgroup, header, footer, address
Grouping content:p, hr, pre, blockquote, ol, ul, li, dl, dt, dd, figure, figcaption, div
Text semantics: a, em, strong, small, s, q, dfn, abbr, time_, code,var, samp, kbd, sub, i, b, u, mark, ruby, rt, rp, bdo, span, br, wbr
Edits: ins, del_
Embedded content: img, iframe, embed, object_, param, video, audio, source, track, canvas, map_, area
Tabular data: table, caption, colgroup, col, tbody, thead, tfoot, tr, td, th
Forms: form, fieldset, legend, label, input_, button,select, datalist, optgroup, option, textarea, keygen, output, progress, meter
Interactive elements: details, summary, command, menu, font
Additional markup: comment
用1个小例子来体会一下:
print(html(body(h1(‘Hello, World!’))))
输出:
hello,world
标记的属性
dominate 还可以使用关键字参数将属性附加到标签上。大多数属性都是来自HTML规范的直接拷贝.
class和for可以使用如下别名
class: _class, cls, className, class_namefor: _for, fr, htmlFor, html_for
使用data_*代表定制HTML5数据属性。
属性的声明有如下方式:
例1:
test=label(‘text’,cls=’classname anothername’,fr=’someinput’)
#输出结果text
例2:
header=div(‘text’)
header[‘id’]=’header’print(header)
如何生成复杂的文档结构
通过使用+=操作符,如下:
list =ul()for item in range(4):
list+= li(‘Item #’, item)
print(list)
输出:
- Item #0
- Item #1
- Item #2
- Item #3
通过add()方法:
_html=html()
_body=_html.add(body())
header=_body.add(div(id=’header’))
content=_body.add(div(id=’content’))
footer=_body.add(div(id=’footer’))
print(_html)
输出:
访问内容和属性
header=div()
header[‘id’]=’header’print(header)
输出
header=div(‘Test’)
header[0]=’Hello World’print(header)
输出
渲染
a=div(span(‘Hello World’))
print(a.render())
Hello World
print(a.render(pretty=False))
print(a.render(indent=’\t’))
Hello World
a=div(span(‘Hello World’),__pretty=False)
print(a.render(xhtml=True))
上下文管理器
例子:
with h:
… li(‘One’)
… li(‘Two’)
… li(‘Three’)
… print(h)
输出:
OneTwoThree
更复杂的例子见文章开头的例子。
可以在with内加入attr(),用来使当前的标签加入属性,如:
d=div()
with d:
… attr(id=’header’)
… print(d)
输出:
装饰器
@div(h2(‘Welcome’),cls=’greeting’)
… def greeting(name):
… p(‘Hello %s’ %name)
…
print(greeting(‘Bob’))
输出:
Welcome
Hello Bob
创建文档
创建一个新文档时,创建了基本的HTML标记结构。
fromdominate import document
d=document()
d+=h1(‘Hello,World!’)
d.body+=p(‘This is a paragraph.’)
print(d)
输出:
Dominate
Hello,World!
This is a paragraph.
还可以直接访问
, ,
d.headd.title’Dominate’d.body
我的需求:
我希望生成一个测试报告的html,然后将这段html以邮件内容的方式发送出去,这样在邮箱中看到的内容就是比较友好的了。
生成测试汇总:
from dominate.tags import *h=html()
datas= {‘all’:30,’success’:20,’fail’:1,’pass’:3}
with h.add(body()).add(div(id=’content’)):
h1(‘接口自动化定期扫描,共有 6 个异常接口’)
with table(border=’1′).add(tbody()):
# 生成报表头部
with tr(align=’center’):
td(colspan=”4″).add(‘测试汇总’)
l= tr(align=”center”, bgcolor=”#0080FF”, style=”color:white”)
l+= td(‘全部’)
l+= td(‘成功’)
l+= td(‘失败’)
l+= td(‘未验证’)
#插入表格数据
l=tr(align=’center’)
with l:
td(datas[‘all’])
td(datas[‘success’])
td(datas[‘fail’])
td(datas[‘pass’])
print(h.render())
结果:
接口自动化定期扫描,共有 6 个异常接口
测试汇总 | |||
全部 | 成功 | 失败 | 未验证 |
30 | 20 | 1 | 3 |
效果:
完整代码:
from dominate.tags import *h=html()
with h.add(body()).add(div(id=’content’)):
h1(‘接口自动化定期扫描,共有 6 个异常接口’)
h2(‘其中2个状态异常,4个响应超时’)
with table(border=’1′).add(tbody()):
# 生成报表头部
with tr(align=’center’):
td(colspan=”4″).add(‘测试汇总’)
l= tr(align=”center”, bgcolor=”#0080FF”, style=”color:white”)
l+= td(‘全部’)
l+= td(‘成功’)
l+= td(‘失败’)
l+= td(‘未验证’)
# 插入表格数据
l= tr(align=’center’)
with l:
td(40)
td(23)
td(3)
td(2)
with h.add(body()).add(div(id=’content’)):
with table(border=’1′).add(tbody()):
# 生成报表头部
with tr(align=’center’):
td(colspan=”7″).add(‘测试明细’)
l= tr(align=”center”, bgcolor=”#0080FF”, style=”color:white”)
l+= td(‘id’)
l+= td(‘接口名称’)
l+= td(‘状态’)
l+= td(‘接口地址’)
l+= td(‘返回值’)
l+= td(‘负责人’)
# 插入表格数据
l= tr(align=’center’)
with l:
td(40)
td(‘消息获取二手房选房卡列表’)
td(2001)
td(‘/appapi/message/v1/findexchange’)
td(‘{“status”:”204″,”msg”:”无数据”,”isPC”:1}’)
td(‘李小明’)
with h.add(body()).add(div(id=’content’)):
with table(border=’1′).add(tbody()):
# 生成报表头部
with tr(align=’center’):
td(colspan=”7″).add(‘超时接口明细’)
l= tr(align=”center”, bgcolor=”#0080FF”, style=”color:white”)
l+= td(‘id’)
l+= td(‘接口名称’)
l+= td(‘接口地址’)
l+= td(‘测试时间’)
l+= td(‘响应时间’)
# 插入表格数据
l= tr(align=’center’)
with l:
td(40)
td(‘消息获取二手房选房卡列表’)
td(‘/appapi/message/v1/findexchange’)
td(‘2020-06-02 22:53:04’)
td(2.31)
print(h.render())
View Code
效果:
参考文档:
今天的文章python怎么生成html文件_【Python】生成html文档-使用dominate分享到此就结束了,感谢您的阅读,如果确实帮到您,您可以动动手指转发给其他人。
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
如需转载请保留出处:https://bianchenghao.cn/40168.html