含有章节索引的中文 文章模板

-- limodou [DateTime(2004-08-24T22:28:53Z)] TableOfContents

meteor(流星) 模板系统说明

meteor(流星)是我给这个模板系统起的名字,因为它可能象流星一样发出耀眼的光芒,但生命却很短暂。我希望在 NewEdit 中用到它。

模板定义

meteor模板是一个真正的Python程序。它是由许多模板元素的定义组成的。一个简单的模板原型为:

{{{!#python from Template import T

hello = T("Hello, <#var#> \n") message = T("Please input yourname:") program = T("""name = input_raw("<#message#>") print <#hello#>

}}}

一个模板文件由许多的模板元素构成。模板元素是Template中T类的一个实例。每个模板元素在创建时要传入它所代表的文本。我定义一个模板元素的文本为未经过替换的原始信息,一个模板元素的值为进行了替换后的文本。文本中可以包含进行替换的模式(pattern),一个模式是形如:

<#name#>

的东西。<#和#>为前导和后导串,可以在Template中进行改变。name为此替换模式的名字,我定义它为一个引用变量。因此<#name#>定义了名为name的引用变量。引用变量最终会用实际的值进行替换:当它的名字正好是本模板中定义的其它模板元素时,此引用变量将用对应的模板元素值进行替换。如果引用变量没有对应的模板元素,则在进行此模板替换的时候应提供一个包含该名字的字典。

meteor模板文件有以下特点:

{
    'template_element1':{'t1_var1':'t1_var1_value', 't1_var2':'t1_var2_value'},
    'template_element2':{'t2_var1':'t2_var1_value', 't2_var2':'t2_var2_value'},
}

{
    'template_element1':{'t1_var1':'t1_var1_value', 't1_var2':'t1_var2_value'},
    'template_element2':[
        {'t2_var1':'t2_var1_value1', 't2_var2':'t2_var2_value1'},
        {'t2_var1':'t2_var1_value2', 't2_var2':'t2_var2_value2'},
        ]
}

模板替换

一个调用模板进行转换的示例程序如下:

   1 from Template import Template
   2 
   3 vars = dict(hello=[{'var':'var1'},      #提供在模板中未定义的引用变量的值,如果没有可以省略
   4     {'var':'var2'},{'var':'var3'}])    
   5 template = Template()                   #生成模板类
   6 template.load('tmp2')                   #装入模板
   7 print template.value('program', vars)   #生成模板元素'program'的值

运行结果如:

name = input_raw("Please input yourname:")
print '''Hello, var1
Hello, var2
Hello, var3
'''

名词列表

模板文件

模板元素

模板文本

模板值

替换模式(引用变量)