python - 使用 Flask 通过 HTML 表单中的动态行指定用户输入
问题描述
在 HTML 中,我有一个表格,表格中有 4 个用户输入。但是,动态显示的行数会有所不同。
<form action="/edit" method="post">
<table>
<tbody>
{% for row in profile_display['rows'] %} <!--# of rows that appear depend on this-->
<tr>
<td> <!--user input 1-->
<form>
<input id={{row[0]~'seq'}} name='seq' class="w-75" type="number" step=1 value="{{row[0]}}" ondblclick="editSeq(`{{row[0]~'seq'}}`);" readonly>
</form>
</td>
<td> <!--user input 2-->
<form>
<input id={{row[0]~'code'}} name='ing_code' class="w-75" value="{{row[1]}}" ondblclick="editCode(`{{row[0]~'code'}}`)" readonly>
</form>
</td>
<td>{{row[2]}}</td>
<td> <!--user input 3-->
<form>
<input id={{row[0]~'weight'}} name='weight' class="w-75" type="number" step=.001 value="{{row[3]}}" ondblclick="editWeight(`{{row[0]~'weight'}}`);" readonly>
</form>
</td>
<td> <!--user input 4-->
<form>
<input id={{row[0]~'ret'}} name='ret_code' class="w-75" value="{{row[4]}}" ondblclick="editRet(`{{row[0]~'ret'}}`)" readonly>
</form>
</td>
</tbody>
</table>
<input type="submit">
</form>
在 Python 中,我正在尝试创建一个函数来更新数据框 profile_df,其中包含预先存在的数据,但可以根据 HTML 表单中的用户输入进行更新。
@app.route('/edit', methods=['GET', 'POST'])
def edit():
global profile_df
if request.method == 'POST':
profile_df=profile_df[profile_df['Food code']==food_display['Food Code']]
for index, row in profile_df.iterrows():
row['Seq num']=request.form.get('seq')
row['Ingredient code']=request.form.get('ing_code')
row['Ingredient weight (g)']=request.form.get('weight')
row['Retention code']=request.form.get('ret_code')
return redirect('/')
虽然我可以使用 row['col'] 准确指定要在 profile_df 中更新哪些单元格,但我不知道如何准确指定要从中获取用户输入的单元格。我知道我可以使用表单中的“名称”属性来获取用户输入,我正在这样做,但由于表单中的行数不同,仅通过“名称”获取是行不通的。我正在考虑通过以某种方式指定行来进一步缩小 request.form.get 的范围,但不确定如何去做。以下是我的尝试,它不起作用,但希望能明确我的意图。基本上,我试图进一步指定用户输入以名称和其他内容出现的确切行(# 行不同)。
@app.route('/edit', methods=['GET', 'POST'])
def edit():
global profile_df
if request.method == 'POST':
profile_df=profile_df[profile_df['Food code']==food_display['Food Code']]
for index, row in profile_df.iterrows():
row['Seq num']=row[request.form.get('seq')]
row['Ingredient code']=row[request.form.get('ing_code')]
row['Ingredient weight (g)']=row[request.form.get('weight')]
row['Retention code']=row[request.form.get('ret_code')]
return redirect('/')
解决方案
我不认为你可以那样做。表单中的“名称”标签必须是唯一的,否则它只是覆盖。我会像你对'id'所做的那样为每一行做不同的'name',然后这样:
for name, value in request.form.items():
print(name, value)
推荐阅读
- reactjs - 依赖项没有保存在 ubuntu 中
- ruby-on-rails - 在 GraphQL 模式中获取上下文
- h.264 - 高动态范围:我可以将 ICtCp 数据直接馈送到视频编码器吗?
- azure - 访问虚拟机的成本
- windows - 将视频文件的帧率和分辨率导出为 excel 或 txt 文件
- python - 尝试安装 psycopg2/psycopg2-binary 时出现 widnows 错误 1120
- javascript - 需要一种从 css 文件中获取颜色代码的方法
- java - 在 Spring Boot 中,哪个类将首先初始化 @Component 或 @Configuration
- python - XGB 性能优于神经网络
- tfs - Git tfs clone - 服务器无法处理请求。---> 生成 XML 文档时出错。---> 指定的强制转换无效