如何获取Jinja2生成的输入值数据?

时间:2014-06-03 19:08:57

标签: python web flask jinja2

在我的HTML文件中,我有:

  <table>
      {% for user in user_data_html %}
      <tr>
         <td>
            <input id="firstname" name="firstname" type="text" value='{{ user.FirstName }}' />  
         </td>
         <td>
             <input name="submit" type="submit" value='update' />
         </td>
     </tr>
     {% else %}
     <tr><td>no user found</td></tr>
     {% endfor %}
 </table>

我想通过单击每行中的更新按钮来修改网页中的用户名。但我总是得到第一个&#34;名字&#34;在后端使用以下python代码:

firstname = request.form['firstname']

我该如何解决这个问题?

2 个答案:

答案 0 :(得分:6)

当您为每个输入名称使用相同的名称时,表单会变得混乱。您可以使用第一个名称在每个表格单元格周围创建单独的表单,也可以使用jinja2循环索引创建唯一的输入名称...

<input id="firstname{{ loop.index }}" name="firstname{{ loop.index }}" type="text" value='{{ user.FirstName }}' />

希望这有帮助!

答案 1 :(得分:1)

request.formwerkzeug.datastructures.MultiDict。您可以使用getlist方法获取字段的所有值:

a_firstname = request.form['firstname']
all_firstnames = request.form.getlist('firstname')

如果您需要按照表单中的名称定义名称,则需要将flask.Request子类化,并将其parameter_storage_class设置为ImmutableOrderedMultiDict的实例。然后,您需要在Flask实例上设置request_class字段:

from flask import Flask, Request
from werkzeug.datastructures import ImmutableOrderedMultiDict

class OrderedRequest(Request):
    parameter_storage_class = ImmutableOrderedMultiDict

app = Flask(__name__)
app.request_class = OrderedRequest

然后request.form.getlist('firstname')将按照浏览器发送的顺序返回字段(通常按照HTML中定义的顺序)。