Web2Py - 使用星号表达式呈现HTML表格

时间:2015-08-06 00:33:57

标签: python html web2py

此问题是Web2Py - rendering AJAX response as HTML table

的扩展

基本上,我想出了一个动态的响应行列表,我需要在UI上显示为HTML表。

基本上代码看起来像这样,

response_results = []

row_one = ['1', 'Col 11', 'Col 12', 'Col 13']
response_results.append(row_one)

row_two = ['2', 'Col 21', 'Col 22', 'Col 23']
response_results.append(row_two)

html = DIV(TABLE(THEAD(TR(TH('Row #'), TH('Col 1'), TH('Col 2'), TH('Col 3')), 
                       _id=0), TR([*response for response in response_results]),
                 _id='records_table', _class='table table-bordered'),
           _class='table-responsive')
return html

当我使用这种代码:TR([request.vars[input] for input in inputs])TR(*the_list)时,它可以正常使用。

但是,我想出使用这两者的混合物TR([*response for response in response_results])。但是,它没有给出错误消息:

  

" Python 2.7版不支持此语法。在Python 2中,不允许使用已加星标的表达式作为分配目标。"

当我运行此代码时,即没有' *':TR([response for response in response_results])它运行正常但将我的行的所有列放在生成的HTML表的第一列中,所有其他栏目都空白。

有人可以帮我解决这个问题,并指导我如何在生成的HTML表格中的适当位置实现显示每行的所需结果?

1 个答案:

答案 0 :(得分:1)

您需要为TR中的每个项生成response_results,这意味着您需要一个TR元素列表,然后您可以使用它们使用Python参数扩展(即{ {1}}语法)将每个*视为TR的位置参数。

TABLE

注意,因为每个html = DIV(TABLE(THEAD(TR(TH('Row #'), TH('Col 1'), TH('Col 2'), TH('Col 3')), _id=0), *[TR(response) for response in response_results], _id='records_table', _class='table table-bordered'), _class='table-responsive') 本身就是一个列表,您还可以在 response中使用参数扩展

TR

但这不是必需的,因为*[TR(*response) for response in response_results] 可选择采用列表,将列表中的每个项目转换为表格单元格。

另一个选项是TR列出response_results元素,从TR元素开始,然后将该列表传递给THEAD

TABLE

同样,您可以执行response_results = [THEAD(TR(TH('Row #'), TH('Col 1'), TH('Col 2'), TH('Col 3')), _id=0)] row_one = ['1', 'Col 11', 'Col 12', 'Col 13'] response_results.append(TR(row_one)) row_two = ['2', 'Col 21', 'Col 22', 'Col 23'] response_results.append(TR(row_two)) html = DIV(TABLE(response_results, _id='records_table', _class='table table-bordered'), _class='table-responsive') ,但TABLE(*response_results, ...)不是必需的,因为*可以获取行元素列表。