<p>我也在做类似的事情。也许我的例子会有所帮助。我正在扩展表单,在您的例子中是RentForm.years,在我的Python烧瓶处理程序中,而不是在我的模板中。这是我的表格</p>
<pre><code>class TemplateFormRow(FlaskForm):
col = StringField(label='Column Name')
data_type = SelectField(label='Data Type',
choices=[("boolean", "boolean"), ("datetime", "datetime"),
("integer", "integer"), ("decimal", "decimal"), ("string", "string")])
sequence = HiddenField()
delete = SubmitField(label='Delete')
class TemplateForm(FlaskForm):
rows = FieldList(unbound_field=FormField(TemplateFormRow))
add_row = SubmitField(label='Add Row', render_kw={'class': "btn btn-primary"})
confirm = SubmitField(label='Save', render_kw={'class': "btn btn-primary"})
btn_cancel = SubmitField(label='Cancel', render_kw={'formnovalidate': True, 'class': "btn btn-primary"})
</code></pre>
<p>注意,在我的例子中,我在父窗体上放置了一个按钮,允许用户添加另一行。如果您总是想要10行,那么处理它的方式会有所不同</p>
<p>下面是使用此表单的Python代码的一部分。append_条目行对您特别重要</p>
<p>如果request.method==“POST”:</p>
<pre><code>if form.btn_cancel.data:
return redirect(url_for('admin'))
if form.add_row.data: # User pressed the add row button
form.rows.append_entry()
</code></pre>
<p>下面是呈现模板的Python代码</p>
<pre><code>return render_template(template_name_or_list='generic_entry_page.html', page_hdr='Template',
show_form=form, form_msg=msg)
</code></pre>
<p>最后,这里是我的模板处理这个的部分</p>
<pre><code> {% for element in show_form %}
{% if element is iterable %} {# This is a vertical set of forms #}
<table>
<tr>
{% for field in element[0] %}
{# {% for field in element.rows[0] %}#}
{% if field.type != 'HiddenField' and field.label.text != 'CSRF Token' %}
<th>{{ field.label }}</th>
{% else %}
<th>{{ field }}</th>
{% endif %}
{% endfor %}
</tr>
{% for row in element %}
<tr>
{% for field in row %}
<td>
{% if field.type == 'SubmitField' %}
<button {{ field }} {{ field.label.text }} </button>
{% else %}
{{ field }}
{% endif %}
</td>
{% endfor %}
</tr>
{% endfor %}
</table>
<br>
</code></pre>
<p>生成的屏幕如下所示。。。
<a href="https://i.stack.imgur.com/pynEV.png" rel="nofollow noreferrer"><img src="https://i.stack.imgur.com/pynEV.png" alt="Hit add row button to add a row"/></a></p>
<p>这有用吗</p>