#python #html #forms #flask #post
Вопрос:
В 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('/')
Хотя я могу точно указать, какие ячейки следует обновить в profile_df, используя строку[‘col’], я не знаю, как точно указать, из каких ячеек следует извлекать пользовательский ввод. Я знаю, что могу захватить пользовательский ввод, используя атрибут » имя «в форме, что я и делаю, но, поскольку количество строк в форме варьируется, просто захватить» имя » не сработает. Я подумываю о том, чтобы сузить запрос.форма.получить еще больше, каким-то образом указав строку, но не уверен, как это сделать. Ниже приведена моя попытка, которая не работает, но, надеюсь, проясняет мои намерения. В принципе, я пытаюсь дополнительно указать точную строку (# строк варьируется), в которой ввод пользователя отображается как по имени, так и по чему-то еще.
@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('/')
Ответ №1:
Я не думаю, что ты можешь сделать это таким образом. тег » имя » в форме должен быть уникальным, в противном случае он просто переопределяется. Я бы сделал другое » имя «для каждой строки, как вы сделали с «идентификатором», а затем сделал бы это таким образом:
for name, value in request.form.items():
print(name, value)