查看關於web.py's built-in templating system的文檔。還有cookbook examples for hooking in 3rd party template engines,如Mako,Cheetah和Jinja2。
爲了將要顯示的數據轉換爲Javascript,您可以使用Python的JSON模塊之一:the standard json module (2.6+),simplejson或python-cjson。
以下是使用web.template
模塊呈現顯示某些數據庫查詢結果的簡單HTML頁面的快速示例。
更新select
方法不會將列名作爲單獨的屬性返回。它返回一個迭代器,其中每一行都是一個字典。因此,要獲得列標題,您需要從第一行抓取。我已經更新的例子來說明如何可以做到這一點:
import web
TEMPLATE = '''$def with (rows, cols)
<html><body>
<h2>Results:</h2>
<table>
<tr>
$for col in cols:
<th>$col</th>
</tr>
$for row in rows:
<tr>
$for col in cols:
<td>$row[col]</td>
</tr>
</table></body></html>'''
class query:
def GET(self, arg):
res = db.select('player', what='id,name')
cols = []
rows = res.list()
if rows:
cols = rows[0].keys()
return tmpl(rows, cols)
db = web.database(dbn='mysql')
tmpl = web.template.Template(TEMPLATE)
urls = ('/(.*)', 'query')
if __name__ == '__main__':
app = web.application(urls, globals())
app.run()
輸出(摺疊,以節省空間):
<html><body>
<h2>Results:</h2>
<table>
<tr><th>id</th><th>name</th></tr>
<tr><td>1</td> <td>Joe</td></tr>
<tr><td>2</td><td>Gary</td></tr>
<tr> <td>3</td><td>Fred</td></tr>
</table></body></html>
這是類似於我一直在做的事情。不過,我一直在努力做一些更深入的事情。由於行對象也有列標題,我怎樣才能將它們包含在表頭中?我無法弄清楚如何引用列的名稱。 – 2011-05-19 12:24:17
@Neil我更新了我的答案。在我使用的版本(最新的0.35)中,列標題必須從第一行中檢索,因爲結果基本上是字典的迭代器,並且沒有單獨的列描述符屬性。 – samplebias 2011-05-19 14:55:33