Python Templating Language

来自开放百科 - 灰狐
2010年12月1日 (三) 00:24Allen (讨论 | 贡献)的版本

(差异) ←上一版本 | 最后版本 (差异) | 下一版本→ (差异)
跳转到: 导航, 搜索

PTL = Python Templating Language, Python 模版语言

def f [html] (): content

目录

First Example

touch test_page.ptl

def numbers [plain] (N):
   for i in range(N):
       i
       " "
>>>import quixote
>>>quixote.enable_ptl()
>>>import test_page
>>>test_page.numbers(5)
' 0 1 2 3 4 '

Example

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

链接

Comment-32x32.png

<discussion>characters_max=300</discussion>

分享您的观点
个人工具
名字空间

变换
操作
导航
工具箱