也许说法不正确,但是目前我能理解的就是替换,替换指定文本中的内容。
例如:
<a name="$code$"></a>
<div class="infomark">$title$</div>
<div class="info" style="background:#F4F4F4">
<pre>
$content$
</pre>
</div>
<div align="right" class="right"><a href="#000">Top</a></div>
<br>
<br>
我要做的只是替换其中特定格式的 $code$,$title$,$conent$,而已。
那么我们用re可以轻松搞定(当然更复杂的template需要更深入的去学习...)。
--------------
import re
import sys
class Template:
"""
简单的模板,用于替换指定文本的特殊字符
例如:$code$
"""
def __init__(self,filename,params,prefix='$',suffix='$'):
if not filename:
print 'Error:'
sys.exit(-1)
else:
self.filename=filename
self.text=''
self.params=params
self.prefix=prefix
self.suffix=suffix
def getKeys(self):
"""
返回所有的要求替换匹配的表达式
"""
return params.keys()
def parse(self):
self.getContent()
keys = self.params.keys()
for key in keys:
value = self.params[key]
self.__replace(key,value)
return self.text
def getContent(self):
"""
读取文件的内容
"""
f = open(self.filename)
lines = f.readlines()
self.text = ''.join(line for line in lines)
def __replace(self,key,value):
#m = re.match(prefix+key+suffix,text)
pattern = '\.*\\'+self.prefix+key+'\\'+self.suffix+'\.*'
self.text = re.sub(pattern,value,self.text)
if __name__=='__main__':
filename = 'D:\\workspace\\style\\test\\template.xt'
params = {'code':'001001','title':'测试','content':'的嘎公司今后;飞机库'}
t = Template(filename,params)
print t.parse()
------------- ------------- ------------- ------------- ------------- ------------- ------------- -------------
这样,我们的python代码可以更简单点了
我们将以前的代码做修改,如下:
import cx_Oracle
from Template import *
def parse():
'''generate the content html'''
sql = '''select t.bz_code code, t.bz_title title, t.bz_content content
from bz_czzs t
order by t.bz_code'''
connection = cx_Oracle.connect( 'etasadmin/etasadmin@zhongju' )
cursor = connection.cursor()
cursor.execute(sql)
item=cursor.fetchone()
i=1;
print 'begin'
while item:
i+=1
print 'parsing ',i,' item....'
writeContent(item[0],item[1],str(item[2]))
item=cursor.fetchone()
def writeContent(code,title,content):
filedir='D:\\m\\content\\'
params = {'code':code,'title':title,'content':content}
t = Template('D:\\workspace\\style\\test\\template.xt',params)
s = t.parse()
out = open(filedir+code+".html",'w')
out.write(s)
out.flush()
out.close()
if __name__=='__main__':
print 'parse..................'
parse()
print 'end'
参考文档:
http://docs.python.org/lib/module-re.html
关于template的进一步思考:
一:不用那么复杂的制定文件全名:
'D:\\workspace\\style\\test
template.xt'
代码实现从当前的classpath中自动寻找该文件,并且制定文件后缀名。
那么就变的如下简单了。
t = Template('template',params)