也许说法不正确,但是目前我能理解的就是替换,替换指定文本中的内容。
例如:

<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)

分享到:
评论