使用 web.py,我通过使用创建了一些结果集
web.database.query()
我想在 html 模板上显示查询结果。
web.py 是否有任何内置工具可以做到这一点?我没有看到任何文档和代码示例。
我也很感激任何指向其他模块的指针,这些模块会将 sql 结果集强制转换为可以由 jquery 或 google 数据网格显示的东西。我开始研究谷歌数据网格转换器,但我不得不跳过一些障碍来处理各种数据类型。我想这已经做过很多次了——我只是想知道我应该去哪里看。
使用 web.py,我通过使用创建了一些结果集
web.database.query()
我想在 html 模板上显示查询结果。
web.py 是否有任何内置工具可以做到这一点?我没有看到任何文档和代码示例。
我也很感激任何指向其他模块的指针,这些模块会将 sql 结果集强制转换为可以由 jquery 或 google 数据网格显示的东西。我开始研究谷歌数据网格转换器,但我不得不跳过一些障碍来处理各种数据类型。我想这已经做过很多次了——我只是想知道我应该去哪里看。
查看web.py 的内置模板系统的文档。还有一些用于挂钩 3rd 方模板引擎(如Mako、Cheetah和Jinja2 )的食谱示例。
为了将数据转换为 Javascript 显示,您可以使用 Python 的 JSON 模块之一:标准 json 模块 (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>