2011-05-19 59 views
0

使用web.py,我創建的結果集極少數使用使用web.py

web.database.query() 

,並顯示一個SQL查詢的結果簡單的辦法,我想上顯示的查詢結果一個html模板。

web.py是否有任何內置工具來執行此操作?我沒有看到任何文檔和代碼示例。

我也很欣賞任何指向其他模塊的指針,這些指針將強制sql結果集轉換爲可以通過jquery或google數據網格顯示的內容。我開始研究谷歌數據網格轉換器,但我不得不跳過一些箍來處理各種數據類型。我認爲這已經完成了很多次 - 我只想知道我應該在哪裏尋找。

回答

2

查看關於web.py's built-in templating system的文檔。還有cookbook examples for hooking in 3rd party template engines,如Mako,CheetahJinja2

爲了將要顯示的數據轉換爲Javascript,您可以使用Python的JSON模塊之一:the standard json module (2.6+),simplejsonpython-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> 
+0

這是類似於我一直在做的事情。不過,我一直在努力做一些更深入的事情。由於行對象也有列標題,我怎樣才能將它們包含在表頭中?我無法弄清楚如何引用列的名稱。 – 2011-05-19 12:24:17

+0

@Neil我更新了我的答案。在我使用的版本(最新的0.35)中,列標題必須從第一行中檢索,因爲結果基本上是字典的迭代器,並且沒有單獨的列描述符屬性。 – samplebias 2011-05-19 14:55:33