Python语言PyH模块生成HTML文档使用说明
补充一下:这是原创。如果转载,我会特别注明,这是道德。
Python语言PyH模块生成HTML文档使用说明
PyH是什么?
PyH是Python语言的一个模块(不是自带的),用于生成HTML文件。不错,它只能生成HTML,并不能解析它。
PyH的特点
它最大的特点是开源,并且源码很短小,只有不到200行。这样,如果你有什么不满意的,可以自己修改它。
源码地址:https://github.com/hanxiaomax/pyh
正如你看到的,一个中国人(很大可能是),对它进行了修改完善,支持了Unicode和Python3。别看这个工程有很多文件,其实只有一个《pyh.py》文件才是源码。
这个源码工程里面,自带了一个中文手册,为加深印象,我又重新总结了一份。
PyH的使用
Tag对象
Tag就是HTML标签,也称之为HTML元素,形如<div><div/>。
生成Tag对象
Tag标签通过同名函数来生成。例如:
<tag>对应的函数就是tag()。其实这个描述不够准确,它不是函数,而是一个对象,没错,tag()表示的一个Tag对象。示例:>>> mydiv = div() >>> mydiv.render() ''在这里,我要做一下评论,render函数不好,它打印了当前的tag对象,但是为什么不重载标准的
__str__方法呢?这样可以减少记忆的负担。通过看源码,其实render还有一个参数,可以写入到一个文件中,这样也不好,一个函数应该做单一的事情,应该把返回字符串和写字符串分开来。
于是,我重构了代码,实现了
__str__函数,于是可以使用下面的函数打印tag的结果。打印tag对象。如下所示:
>>> from pyh import * >>> a=div() >>> print(a) <div> </div> >>> str(a) '\n\n\n'设置Tag属性
有两种方式,一种是生成Tag对象时作为参数传递,另外一种是生成Tag对象后修改和设置其attributes属性,因为attributes是一个字典,存放的就是tag的属性,其key是属性的名字,value就是属性的值。但是有一点需要特别注意,对于class属性,其key为cl,原因也比较容易理解。
方法1,如下示例:
>>> from pyh import * >>> a=div(b='b',c='c') >>> print(a) <div b="b" c="c"> </div>方法2,如下示例:
>>> from pyh import * >>> a=div() >>> a.attributes['b']='b' >>> a.attributes['c']='c' >>> print(a) <div b="b" c="c"> </div>需要注意的是,key是一个字符串,作为参数不需要加上引号,但是使用属性需要加上引号。
设置tag的文本内容
同tag属性的设置一样,也有两种方法,一种是作为构造函数的参数传递,一种使用追加符号<<,如下面的示例。
方法1:作为构造函数的参数
>>> from pyh import * >>> a=div('a') >>> print(a) <div> a </div>方法2:使用追加符号
>>> a=div() >>> a<<'test' >>> print(a) <div> test </div>
设置tag的子元素
tag的子元素,也就是子tag,HTML的子标签。与设置tag的内容基本上是一样的,如下示例。
方法1:作为构造函数的参数
>>> a=div(div('test1'),div('test2')) >>> print(a) <div> <div> test1 </div> <div> test2 </div> </div>方法2:使用追加操作符
>>> a=div() >>> a<<div('test1') >>> a<<div('test2') >>> print(a) <div> <div> test1 </div> <div> test2 </div> </div>
设置tag的兄弟元素
这里的说法有些不准确,应该是设置当前tag的相邻的下一个元素,使用+连接即可。如下示例。
>>> a=div(id='a')+div(id='b')+div(id='c')
>>> print(a)
<div id="a">
</div>
<div id="b">
</div>
<div id="c">
</div>
访问子元素
这个小结无关紧要,是可选的,但有时也可能用得着,所以还是描述一下吧。之前讲述了如何给tag添加子元素,如果要获取子元素,可以使用子元素的ID,如果子元素没有设置ID,则使用tag_001等类似的字符串作为其ID,如下所示。
有元素ID的情况
>>> a=div(div(id='test')) >>> print(a.test) <div id="test"> </div>没有元素ID的情况
>>> a=div(div(name='d1'),div(name='d2')) >>> print(a.div) <div name="d1"> </div> >>> print(a.div_001) <div name="d2"> </div>
使用PyH对象生成网页
上一章节讲述了核心的Tag对象,现在我们看看如何生成HTML网页。为什么放在Tag对象的后面来讲呢?因为PyH对象其实也是Tag对象,也不完全是,它继承自Tag对象。只不过增加了一些用于简化的特殊方法,其实没有这些方法也完全可以自己来生成。
生成网页框架
>>> a=PyH()
>>> print(a)
<html>
<head>
<title>
MyPyHPage
</title>
</head>
<body>
</body>
</html>
你会发现,这个网页框架少一个类似<!DOCTYPE html>的描述,我们可以重写实现,增加一个就好了。
总结
至此,就基本上就可以用它干活了。由于代码较短,我也做了一些小修改,上述的示例和代码库中的原始版本可能会有微小差异,应该影响也不大。
另外,我准备在写一篇文档,对源码进行分析,这样也方便后来者理解代码并修改完善它。
Leave Python语言PyH模块生成HTML文档使用说明 to:
Read more #cn posts
Best Posts From brysj22952
We have not curated any of brysj22952's posts yet. But you can encourage our curation team to review posts by visiting them regularly and by referring other readers. Because we give priority to frequently read content.
More Posts From brysj22952
- 我为什么想自己实现语法解析器
- PyH源码解析(6)——完结篇
- PyH源码解析(5)
- PyH源码解析(4)
- PyH源码解析(3)
- PyH源码解析(2)
- PyH源码解析(1)
- Python语言PyH模块生成HTML文档使用说明
- linux屏蔽ctrl+s键的方法
- LXML官方文档翻译
- 使用Flask和React构建博客系统(1)
- 解决网站开发中网页在手机上显示不全的问题
- 2018.6.25 My microblog 微博
- MyBrain项目(1)
- 2018.3.20 My microblog 微博
- click的命令自动补齐功能介绍
- python命令行神器click介绍
- Linux find命令使用心得(Linux find cmd use experience)
- Piston工具翻译-Steem网络的瑞士军刀(2)
- Piston工具翻译-Steem网络的瑞士军刀(1)