在表单中向 Web2py table 添加列
Adding columns to a Web2py table in a form
在我的 web2py 应用程序中,我在控制器中从外部数据库中读取了我想要注册的学生的姓名。我遍历结果列表,将列表元素添加到新列表中。
for student in pupils_query:
attendance_list.insert(counter, [student[0], student[1], student[2], student[3]])
counter += 1
counter = 0
然后,对于每个学生,我从另一个 table 读取他们当天的出勤代码,并将它们附加到 attendance_list:
for attendance_code in attendance_result:
attendance_list[counter].append(attendance_code)
现在,我想使用 table 将所有这些制作成一个表格,它将在文本输入中显示每个学生的出勤代码(如果错误可以更新),然后有一个用于输入当前课程代码的下拉列表。
我正在使用 FORM 和 TABLE 帮助器以以下形式创建 table:
form=FORM(TABLE(*[TR(*rows) for rows in attendance_list]))
但似乎无法添加新的 'row' 表单项,例如:
select = "SELECT("+ main_reg_list +")"
attendance_list[counter].append(select)
其中 main_reg_list 是 acceptable 考勤代码(当然,任何其他表单输入元素)的字典。
总而言之,我一直在将新的 TD 添加到 table 中,该 table 使用列表列表中的 TABLE 助手制作。我打赌我不是第一个克服这个问题的人。
我还不清楚你想要什么。我想你想要 table 的学生信息,并且在一栏中你想要下拉列表。类似于下图
以上表格是根据以下代码创建的。
希望以下代码对您有所帮助:
# controller/default.py
def index():
# Dummy attendance list, list after appending attendance code
attendance_list = [['stud_id_1', 'first_name_1', 'last_name_1', 'attendance_code_1'],
['stud_id_2', 'first_name_2', 'last_name_2', 'attendance_code_2'],
['stud_id_3', 'first_name_3', 'last_name_3', 'attendance_code_5'],
['stud_id_4', 'first_name_4', 'last_name_4', 'attendance_code_4']]
possible_att_code = ['attendance_code_1', 'attendance_code_2', 'attendance_code_3', 'attendance_code_4', 'attendance_code_5']
# initialise form_rows with Table heading
form_rows = [THEAD(TR(TH('ID'), TH('First Name'), TH('Last Name'), TH('Attendence Code')))]
for attendance in attendance_list:
attendance_code_dropdown = _get_dropdown(attendance[0], attendance[3], possible_att_code)
td_list = [TD(attendance[0]), TD(attendance[1]), TD(attendance[2]),
TD(attendance_code_dropdown)]
table_row = TR(td_list, _id='row_' + attendance[0])
form_rows.append(table_row)
# Form submit button
form_rows.append(TR(INPUT(_type='submit')))
form = FORM(TABLE(*form_rows), _name='student_attendance',
_id='student_attendance')
if form.accepts(request, session):
# Write code to update record
pass
return dict(form=form)
def _get_dropdown(stud_id, att_code, possible_att_code):
option_list = []
for pac in possible_att_code:
if pac == att_code:
option_list.append(OPTION(pac, _value=pac, _selected='selected'))
else:
option_list.append(OPTION(pac, _value=pac))
return SELECT(*option_list, _name=stud_id)
<!-- views/default/index.html -->
{{extend 'layout.html'}}
{{=form}}
我的假设是否正确?或者你想要别的东西吗?如果不理解代码,请评论。
在我的 web2py 应用程序中,我在控制器中从外部数据库中读取了我想要注册的学生的姓名。我遍历结果列表,将列表元素添加到新列表中。
for student in pupils_query:
attendance_list.insert(counter, [student[0], student[1], student[2], student[3]])
counter += 1
counter = 0
然后,对于每个学生,我从另一个 table 读取他们当天的出勤代码,并将它们附加到 attendance_list:
for attendance_code in attendance_result:
attendance_list[counter].append(attendance_code)
现在,我想使用 table 将所有这些制作成一个表格,它将在文本输入中显示每个学生的出勤代码(如果错误可以更新),然后有一个用于输入当前课程代码的下拉列表。
我正在使用 FORM 和 TABLE 帮助器以以下形式创建 table:
form=FORM(TABLE(*[TR(*rows) for rows in attendance_list]))
但似乎无法添加新的 'row' 表单项,例如:
select = "SELECT("+ main_reg_list +")"
attendance_list[counter].append(select)
其中 main_reg_list 是 acceptable 考勤代码(当然,任何其他表单输入元素)的字典。
总而言之,我一直在将新的 TD 添加到 table 中,该 table 使用列表列表中的 TABLE 助手制作。我打赌我不是第一个克服这个问题的人。
我还不清楚你想要什么。我想你想要 table 的学生信息,并且在一栏中你想要下拉列表。类似于下图
以上表格是根据以下代码创建的。 希望以下代码对您有所帮助:
# controller/default.py
def index():
# Dummy attendance list, list after appending attendance code
attendance_list = [['stud_id_1', 'first_name_1', 'last_name_1', 'attendance_code_1'],
['stud_id_2', 'first_name_2', 'last_name_2', 'attendance_code_2'],
['stud_id_3', 'first_name_3', 'last_name_3', 'attendance_code_5'],
['stud_id_4', 'first_name_4', 'last_name_4', 'attendance_code_4']]
possible_att_code = ['attendance_code_1', 'attendance_code_2', 'attendance_code_3', 'attendance_code_4', 'attendance_code_5']
# initialise form_rows with Table heading
form_rows = [THEAD(TR(TH('ID'), TH('First Name'), TH('Last Name'), TH('Attendence Code')))]
for attendance in attendance_list:
attendance_code_dropdown = _get_dropdown(attendance[0], attendance[3], possible_att_code)
td_list = [TD(attendance[0]), TD(attendance[1]), TD(attendance[2]),
TD(attendance_code_dropdown)]
table_row = TR(td_list, _id='row_' + attendance[0])
form_rows.append(table_row)
# Form submit button
form_rows.append(TR(INPUT(_type='submit')))
form = FORM(TABLE(*form_rows), _name='student_attendance',
_id='student_attendance')
if form.accepts(request, session):
# Write code to update record
pass
return dict(form=form)
def _get_dropdown(stud_id, att_code, possible_att_code):
option_list = []
for pac in possible_att_code:
if pac == att_code:
option_list.append(OPTION(pac, _value=pac, _selected='selected'))
else:
option_list.append(OPTION(pac, _value=pac))
return SELECT(*option_list, _name=stud_id)
<!-- views/default/index.html -->
{{extend 'layout.html'}}
{{=form}}
我的假设是否正确?或者你想要别的东西吗?如果不理解代码,请评论。