FlaskWTForms:动态创建name和id属性

2024-06-10 11:08:44 发布

您现在位置:Python中文网/ 问答频道 /正文

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

假设我有以下烧瓶视图:

@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)

以及HTML模板dynamic.html中的以下表单:

^{pr2}$

其结果如下:

<form method='POST' action='/dynamic'>
  <input type="text" class="form-control" id="team0_name0" name="team0_name0">
  <input type="text" class="form-control" id="team0_name1" name="team0_name1">
  <input type="text" class="form-control" id="team1_name0" name="team1_name0">
  <input type="text" class="form-control" id="team1_name1" name="team1_name1">
<form>

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


Tags: textnameformid表单inputtypedynamic
1条回答
网友
1楼 · 发布于 2024-06-10 11:08:44

弄明白了。我需要使用WTFormsFieldlistFormField附件。在

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)解包:

^{pr2}$

相关问题 更多 >