Web2Py - 使用带星号的表达式进行渲染 HTML table

Web2Py - using starred expression for rendering HTML table

这个问题是以下问题的延伸:

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

代码基本上是这样的,

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 version 2.7 does not support this syntax. Starred expressions are not allowed as assignment targets in Python 2."

当我 运行 改为使用此代码时,即没有“*”:TR([response for response in response_results]) 它 运行 没问题,但将我行的所有列放在第一列中生成 HTML table,将所有其他列留空。

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

您需要为 response_results 中的每个项目生成一个 TR,这意味着您需要一个 TR 元素的列表,然后您可以使用 Python 参数扩展(即 * 语法)将每个 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 本身就是一个列表,您还可以在 中使用参数扩展 the TR:

*[TR(*response) for response in response_results]

但这不是必需的,因为 TR 可选择获取一个列表,将列表中的每个项目转换为一个 table 单元格。

另一种选择是使 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, ...),但是 * 不是必需的,因为 TABLE 可以采用行元素列表。