Python Templating Language

来自开放百科 - 灰狐
2007年3月1日 (四) 12:53Allen (讨论 | 贡献)的版本

跳转到: 导航, 搜索

PTL = Python Templating Language

def f [html] (): content

example.ptl:

To callers, templates behave like regular Python functions

def cell [html] (content):
    '<td>'         # Literal expressions are appended to the output
    content        # Expressions are evaluated, too.
    '</td>'
def row [html] (L):
    # L: list of strings containing cell content
    '<tr>'
    for s in L:
        cell(s)
    '</tr>\n'
def loop (n):  # No [html], so this is a regular Python function
    output = ""
    for i in range(1, 10):
        output += row([str(i), i*'a', i*'b'])
    return output

Using templates

Templates live in .ptl files, which can be imported. To enable this:

import quixote ; quixote.enable_ptl() # Enable import hook

Templates behave just like Python functions:

>>> import example
>>> example.cell('abc')
<htmltext '<td>abc</td>'>
>>> example.loop()
<htmltext '<tr><td>1</td><td>a</td><td>b</td>...</tr>\n'>

In .ptl files, methods can even be PTL files.

Automatic escaping

def no_quote [plain] (arg):
    '<title>'
    arg              # Converted to string
    '</title>'
def quote [html] (arg):
    '<title>'
    arg              # Converted to string and HTML-escaped
    '</title>'
>>> no_quote('A history of the < symbol')
'<title>A history of the < symbol</title>'
>>> quote('A history of the < symbol')
<htmltext '<title>A history of the < symbol</title>'>
分享您的观点
个人工具
名字空间

变换
操作
导航
工具箱