Python Templating Language

来自开放百科 - 灰狐
(版本间的差异)
跳转到: 导航, 搜索
 
第1行: 第1行:
 
PTL = Python Templating Language
 
PTL = Python Templating Language
 +
 +
def f [html] (): content
  
 
example.ptl:
 
example.ptl:
  
# To callers, templates behave like regular Python functions  
+
To callers, templates behave like regular Python functions  
 
  def cell [html] (content):
 
  def cell [html] (content):
 
     '<td>'        # Literal expressions are appended to the output
 
     '<td>'        # Literal expressions are appended to the output
第13行: 第15行:
 
     '<tr>'
 
     '<tr>'
 
     for s in L:
 
     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 &lt; symbol</title>'>

2007年3月1日 (四) 12:53的版本

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>'>
分享您的观点
个人工具
名字空间

变换
操作
导航
工具箱