写了一个例子,可以使用python手动生成html页面。
注释里面有相关的必要信息。如下:
- #!/usr/bin/python
- '''an example for generate html page.
- the module used is:PyH
- Its home page is:
- we can download it at:downloads/detail?name=PyH-0.1.1.tar.gz&can=2&q=
- More things about html at:
- '''
- from pyh import *
- page = PyH("MyPage")
- #page.addCSS('myStylesheet1.css', 'myStylesheet2.css')
- #page.addJS('myJavascript1.js', 'myJavascript2.js')
- #<h1 align="center">MyTitle1</h1>
- page <<h1('MyTitle1',align='center')
- #<div align="center" id="myDiv1"><p id="myp1">my paragraph1</p>
- #</div>
- page << div(align='center',id='myDiv1') << p('my paragraph1',id='myp1')
- #<div id="myDiv2"><h2>title2 in div2<p>paragraph under title2</p>
- #</h2>
- #</div>
- mydiv2 = page << div(id='myDiv2')
- mydiv2 <<h2('title2 in div2') << p('paragraph under title2')
- #<div align="right" id="myDiv3"><p>paragraph in mydiv3</p>
- #</div>
- mydiv3 = page << div(id='myDiv3')
- mydiv3.attributes['align'] = 'right'
- mydiv3 << p('paragraph in mydiv3')
- #<table border="1" id="mytable1"><tr id="headline"><td>Head1<td>Head2</td>
- #</td>
- #</tr>
- #<tr id="line1"><td>r1,c1<td>r1,c2</td>
- #</td>
- #</tr>
- #<tr id="line2"><td>r2,c1<td>r2,c2</td>
- #</td>
- #</tr>
- #</table>
- table1 = page << table(border='1',id='mytable1')
- headtr = table1 << tr(id='headline')
- headtr << td('Head1') << td('Head2')
- tr1 = table1 << tr(id='line1')
- tr1 << td('r1,c1') <<td('r1,c2')
- tr2 = table1 << tr(id='line2')
- tr2 << td('r2,c1') <<td('r2,c2')
- #The result is:
- #<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "">
- #<html lang="en" xmlns=""><head><title>MyPage</title>
- #</head>
- #<body><h1 align="center">MyTitle1</h1>
- #<div align="center" id="myDiv1"><p id="myp1">my paragraph1</p>
- #</div>
- #<div id="myDiv2"><h2>title2 in div2<p>paragraph under title2</p>
- #</h2>
- #</div>
- #<div align="right" id="myDiv3"><p>paragraph in mydiv3</p>
- #</div>
- #<table border="1" id="mytable1"><tr id="headline"><td>Head1<td>Head2</td>
- #</td>
- #</tr>
- #<tr id="line1"><td>r1,c1<td>r1,c2</td>
- #</td>
- #</tr>
- #<tr id="line2"><td>r2,c1<td>r2,c2</td>
- #</td>
- #</tr>
- #</table>
- #</body>
- #</html>
- page.printOut()
这里,pyh是一个生成html的模块库,已经给出其网址,也将代码列出如下:
- # @file: pyh.py
- # @purpose: a HTML tag generator
- # @author: Emmanuel Turlay <turlay@cern.ch>
- __doc__ = """The pyh.py module is the core of the PyH package. PyH lets you
- generate HTML tags from within your python code.
- See for documentation.
- """
- __author__ = "Emmanuel Turlay "
- __version__ = '$Revision: 63 $'
- __date__ = '$Date: 2010-05-21 03:09:03 +0200 (Fri, 21 May 2010) $'
- from sys import _getframe, stdout, modules, version
- nOpen={}
- nl = '\n'
- doctype = '\n'
- charset = '\n'
- tags = ['html', 'body', 'head', 'link', 'meta', 'div', 'p', 'form', 'legend',
- 'input', 'select', 'span', 'b', 'i', 'option', 'img', 'script',
- 'table', 'tr', 'td', 'th', 'h1', 'h2', 'h3', 'h4', 'h5', 'h6',
- 'fieldset', 'a', 'title', 'body', 'head', 'title', 'script', 'br', 'table',
- 'ul', 'li', 'ol']
- selfClose = ['input', 'img', 'link', 'br']
- class Tag(list):
- tagname = ''
-
- def __init__(self, *arg, **kw):
- self.attributes = kw
- if self.tagname :
- name = self.tagname
- self.isSeq = False
- else:
- name = 'sequence'
- self.isSeq = True
- self.id = kw.get('id', name)
- #self.extend(arg)
- for a in arg: self.addObj(a)
- def __iadd__(self, obj):
- if isinstance(obj, Tag) and obj.isSeq:
- for o in obj: self.addObj(o)
- else: self.addObj(obj)
- return self
-
- def addObj(self, obj):
- if not isinstance(obj, Tag): obj = str(obj)
- id=self.setID(obj)
- setattr(self, id, obj)
- self.append(obj)
- def setID(self, obj):
- if isinstance(obj, Tag):
- id = obj.id
- n = len([t for t in self if isinstance(t, Tag) and t.id.startswith(id)])
- else:
- id = 'content'
- n = len([t for t in self if not isinstance(t, Tag)])
- if n: id = '%s_%03i' % (id, n)
- if isinstance(obj, Tag): obj.id = id
- return id
- def __add__(self, obj):
- if self.tagname: return Tag(self, obj)
- self.addObj(obj)
- return self
- def __lshift__(self, obj):
- self += obj
- if isinstance(obj, Tag): return obj
- def render(self):
- result = ''
- if self.tagname:
- result = '<%s%s%s>' % (self.tagname, self.renderAtt(), self.selfClose()*' /')
- if not self.selfClose():
- for c in self:
- if isinstance(c, Tag):
- result += c.render()
- else: result += c
- if self.tagname:
- result += '%s>' % self.tagname
- result += '\n'
- return result
- def renderAtt(self):
- result = ''
- for n, v in self.attributes.iteritems():
- if n != 'txt' and n != 'open':
- if n == 'cl': n = 'class'
- result += ' %s="%s"' % (n, v)
- return result
- def selfClose(self):
- return self.tagname in selfClose
-
- def TagFactory(name):
- class f(Tag):
- tagname = name
- f.__name__ = name
- return f
- thisModule = modules[__name__]
- for t in tags: setattr(thisModule, t, TagFactory(t))
- def ValidW3C():
- out = a(img(src='', alt='Valid XHTML 1.0 Strict'), href='')
- return out
- class PyH(Tag):
- tagname = 'html'
-
- def __init__(self, name='MyPyHPage'):
- self += head()
- self += body()
- self.attributes = dict(xmlns='', lang='en')
- self.head += title(name)
- def __iadd__(self, obj):
- if isinstance(obj, head) or isinstance(obj, body): self.addObj(obj)
- elif isinstance(obj, meta) or isinstance(obj, link): self.head += obj
- else:
- self.body += obj
- id=self.setID(obj)
- setattr(self, id, obj)
- return self
- def addJS(self, *arg):
- for f in arg: self.head += script(type='text/javascript', src=f)
- def addCSS(self, *arg):
- for f in arg: self.head += link(rel='stylesheet', type='text/css', href=f)
-
- def printOut(self,file=''):
- if file: f = open(file, 'w')
- else: f = stdout
- f.write(doctype)
- f.write(self.render())
- f.flush()
- if file: f.close()
阅读(9601) | 评论(0) | 转发(0) |