偶而需要用 python 產生 HTML 報表, 自己手刻 HTML 頗麻煩的。寫個小 script 不會像寫網頁那頁使用 MVC 將資料和顯示分離, 不方便套 template (況且學 template 的語法也有點麻煩)。
找了一下發現 pyh, 語法滿直覺的, 大致符合我的需求。於是自己重做了一個 ph, 改成更合自己習慣的語法, 順便練習自己設計一套簡單的 DSL, 寫起來像這樣:
from ph import * doc = HTML() doc.body() << p('Hello, world!') << (p('What a ') << strong('wonderful') << ' world!') print unicode(doc)輸出像這樣 (有手動排版過):
<!DOCTYPE html> <html> <head><title>No Title</title></head> <body> <p>Hello, world!</p> <p>What a <strong>wonderful</strong> world!</p> </body> </html>
以前沒想過覆寫 operator, 覺得這種作法容易讓人困惑。但是以 HTML generator 的例子來說, 用 << 組合 HTML 元素挺方便的。