【问题标题】:Flask WTForms Dynamic Editable Table Fields with Field NamesFlask WTForms 具有字段名称的动态可编辑表字段
【发布时间】:2018-07-04 03:46:21
【问题描述】:

如何让字段名称以文本/字符串形式返回?

Highlighted "Field Names" I want returned as text, not fields

我正在动态创建字段列表,然后附加值。但我似乎无法想出将字段名称作为纯文本返回的方法。下面的代码将它们附加到一个字段(字段名)——这是我能够返回它们的唯一方法。

class ContractFields(FlaskForm):
    fieldname = StringField()
    fieldvalue = StringField()

class ContractForm(FlaskForm):
    title = StringField('title')
    contractfieldlist = FieldList(FormField(ContractFields))

@app.route('/tester.html', methods=['GET','POST'])
def contractfields():
    form = ContractForm()
    for f in object:
            document_form = ContractFields()
            document_form.fieldname = f.name #need this list object to return as table text, not a field
            document_form.fieldvalue = f.value

            form.contractfieldlist.append_entry(document_form)

    return render_template('tester.html', form = form)

从模板中:

<div>
  <form action="" method="post" name="form">
    {{ form.hidden_tag() }}
    <div>
      <table>
        <tr>
          <th> ListNumber </th>
          <th> Field Name </th>
          <th> Field Value </th>
        </tr>
        {% for items in form.contractfieldlist %}
        <tr>
          <td>{{ items.label }}</td>
          <td>{{ items.fieldname }}</td>
          <td>{{ items.fieldvalue }}</td>
        </tr>
        {% endfor %}
      </table>
    </div>
    <p><input type="submit" name="edit" value="Send"></p>
  </form>
</div>

【问题讨论】:

    标签: python flask jinja2 flask-wtforms


    【解决方案1】:

    我在 Python 方面的经验主要是有限的 ETL 和数据转换,所以我不明白为什么这么复杂。但经过太多小时后,我终于找到了following solution worked for me

    具体修改上述帖子的相关摘录如下:

    class ContractFields(FlaskForm):
            fieldname = HiddenField()
            fieldvalue = StringField()
            def __init__(self, *args, **kwargs):
                    super(ContractFields, self).__init__(*args, **kwargs)
                    if 'obj' in kwargs and kwargs['obj'] is not None:
                            self.fieldvalue.label.text = kwargs['obj'].fieldname
    

    以及模板html到:

          <td>{{ items.label }}</td>
          <td>{{ items.fieldvalue.label }}</td>
          <td>{{ items.fieldvalue }}</td>
    

    【讨论】:

      猜你喜欢
      • 2015-03-05
      • 2020-11-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-10-27
      • 2021-07-09
      相关资源
      最近更新 更多