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
可以采用行元素列表。
这个问题是以下问题的延伸:
基本上,我想出了一个动态的响应行列表,我需要在 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
可以采用行元素列表。