使用WT Forms从数据库取数后前端仅显示部分字段的问题排查
问题排查与修复
1. 前端模板的核心语法错误
你的模板里存在多处写法错误,是导致字段无法正常渲染的主要原因:
- 错误写法:
entry.day.data(class="form-control")、entry.date.data(class="form-control").data是字段的值属性(比如字符串、日期对象),不是表单字段本身,不能通过调用它来生成带样式的表单控件。正确做法是直接调用字段实例。 - 语法错误:
entry.description }}></td>多了一个多余的>,导致模板解析异常,直接影响后续所有字段的渲染。
2. 视图层FormField添加方式的优化
直接创建TimesheetEntryForm实例再添加到FieldList,可能出现字段初始化不完整的问题,建议通过form.entries.append_entry()直接生成条目后再赋值,避免潜在的实例化冲突。
修正后的代码
修正后的前端模板
{% for form in content.timesheets %} {% for entry in form.entries %} <tr> <td>{{ form.emp_id(class="form-control") }}</td> <td>{{ form.project_id(class="form-control") }}</td> <td>{{ entry.day(class="form-control") }}</td> <td>{{ entry.date(class="form-control") }}</td> <td>{{ entry.description(class="form-control") }}</td> <td>{{ entry.for_act(class="form-control") }}</td> <td>{{ entry.dev_hr(class="form-control") }}</td> <td>{{ entry.prod_hr(class="form-control") }}</td> <td>{{ entry.test_hr(class="form-control") }}</td> <td>{{ entry.meet_hr(class="form-control") }}</td> <td>{{ entry.total_hr(class="form-control") }}</td> </tr> {% endfor %} {% endfor %}
优化后的视图逻辑
timesheets = [] for row in rows: form = TimesheetForm() form.emp_id.data = row['emp_id'] form.project_id.data = row['project_id'] # 通过FieldList的append_entry生成条目,再赋值 entry = form.entries.append_entry() entry.day.data = row['day'] entry.date.data = row['date'] entry.description.data = row['description'] entry.for_act.data = row['for_act'] entry.dev_hr.data = row['dev_hr'] entry.prod_hr.data = row['prod_hr'] entry.test_hr.data = row['test_hr'] entry.meet_hr.data = row['meet_hr'] entry.total_hr.data = row['total_hr'] timesheets.append(form)
额外说明
- 如果仅需展示数据而非表单控件,可直接输出
.data,比如{{ entry.description.data }},注意不要加调用括号。 - 之前
entry.date看似正常显示,是因为模板解析到错误的entry.description }}>时中断,而date字段在错误之前,所以能完成渲染;修正语法错误后,后续字段即可正常显示。
内容的提问来源于stack exchange,提问作者HellBanger
相关产品推荐
相关产品推荐

