I am trying to use my flask backend to extract my input. However, in my html file, I use javascript so that I can dynamically arrange any number of input boxes I want.
<!DOCTYPE html>
<script>
function add_field()
{
var total_text=document.getElementsByClassName("input_text");
total_text=total_text.length+1;
document.getElementById("field_div").innerHTML=document.getElementById("field_div").innerHTML+
"<li id='input_text"+total_text+"_wrapper'><input type='text' class='input_text' id='input_text"+total_text+"' placeholder='Enter Text'></li>";
}
function remove_field()
{
var total_text=document.getElementsByClassName("input_text");
document.getElementById("input_text"+total_text.length+"_wrapper").remove();
}
</script>
{% extends "bootstrap/base.html" %}
{% block content %}
<div class = "container">
<h1>Give the words</h1>
<form action='/results' method="post">
<div id="wrapper">
<input type="button" value="Add TextBox" onclick="add_field();"><input type="button" value="Remove TextBox" onclick="remove_field();">
<ol id="field_div">
</ol>
</div>
<input type='submit' value='Select'>
</form>
</div>
{% endblock %}
My views.py is as follows:
from flask import render_template, request
from app import app
from .translit import *
@app.route('/')
def search():
return render_template('index.html')
@app.route('/results', methods=['POST'])
def results():
words = getwds(request.form['input_text1'])
return render_template('results.html', words=words)
- How do I change the code in such a way that all the input boxes are extracted from in a list?
The square bracket syntax in
name
attribute of input elements converts form inputs into an array. So, when you usename="input_text[]"
you will get an array. This array can be handled in Flask routing usingrequest.form.getlist
method. Let's see this in action.app.py
:dynamic_input.html
contains:dynamic_input_results.html
contains:Output
Figure 1: Dynamic input elements
Figure 2: Result is showing as a list after submitting the previous form
N.B.:
I have modified your JS code to prevent overriding of text input values after adding a new text box.
Updated:
Added checkbox with each textbox.
app.py
:dynamic_input.html
:dynamic_input_results.html
:Output: