Flask-WTForms:动态创建名称和id属性

时间:2017-04-03 22:31:28

标签: python wtforms flask-wtforms

我的表单允许用户为特定数量的篮球队输入特定数量的名称。这些数字不断更新,因此我需要创建一个动态表单。

假设我有以下Flask视图:

_someBoolean = !_someBoolean;

HTML模板@app.route('/dynamic', methods=['GET', 'POST']) def dynamic(): teams = ['Warriors', 'Cavs'] name_count = 2 return render_template('dynamic.html', teams=teams, name_count=name_count) 中的以下表单:

dynamic.html

产生以下形式:

<form method='POST' action='/dynamic'>
  {% for team_index in range(teams | count) %}
    {% for name_index in range(name_count) %}
      <input type="text"
             class="form-control"
             id="team{{ team_index }}_name{{ name_index }}"
             name="team{{ team_index }}_name{{ name_index }}">
    {% endfor %}
  {% endfor %}
<form>

我喜欢Flask-WTF库,所以我想知道如何使用它(或简称wtforms)来呈现此表单。我不确定这是否可行,因为wtforms需要每个输入都有一个硬编码的字段名称。

1 个答案:

答案 0 :(得分:1)

想出来了。我需要使用WTForms GVRFieldlist附件。

FormField

通过第一个字段= class PlayerForm(FlaskForm): player = Fieldlist(StringField('Player')) class TeamForm(FlaskForm): team = Fieldlist(FormField(PlayerForm)) @app.route('/dynamic', methods=['GET', 'POST']) def dynamic(): teams = ['Warriors', 'Cavs'] name_count = 2 # Build dictionary to prepopulate form prepop_data = {'team': [{'player': ['' for p in range(name_count)]} for team in teams]} # Initialize form form = TeamForm(data=prepop_data) return render_template('dynamic.html', form=form) 上的jinja2(idname属性)解压缩:

team-0-player-0