I have the code below in my Python script:
def cmd_wui(argv, path_to_tx):
    """Run a web UI."""
    from flask import Flask, flash, jsonify, render_template, request
    import webbrowser
    app = Flask(__name__)
    @app.route('/tx/index/')
    def index():
        """Load start page where you select your project folder
        or load history projects from local DB."""
        from txclib import get_version
        txc_version = get_version()
        prj = project.Project(path_to_tx)
        # Let's create a resource list from our config file
        res_list = []
        prev_proj = ''
        for idx, res in enumerate(prj.get_resource_list()):
                hostname = prj.get_resource_host(res)
        username, password = prj.getset_host_credentials(hostname)
        return render_template('init.html', txc_version=txc_version, username=username)
Also, I have an HTML form in init.html:
<form> <input type="text" id="projectFilepath" size="40" placeholder="Spot your project files"> <input type="button" id="spotButton" value="Spot"> </form>
How can I pass the user input from “projectFilepath” when a user clicks “spotButton” on a variable in my python script?
I’m new in Python and Flask, so forgive me if I make any mistakes.
Advertisement
Answer
The form tag needs some attributes set:
- action: The URL that the form data is sent to on submit. Generate it with- url_for. It can be omitted if the same URL handles showing the form and processing the data.
- method="post": Submits the data as form data with the POST method. If not given, or explicitly set to- get, the data is submitted in the query string (- request.args) with the GET method instead.
- enctype="multipart/form-data": When the form contains file inputs, it must have this encoding set, otherwise the files will not be uploaded and Flask won’t see them.
The input tag needs a name parameter.
Add a view to handle the submitted data, which is in request.form under the same key as the input’s name. Any file inputs will be in request.files.
@app.route('/handle_data', methods=['POST'])
def handle_data():
    projectpath = request.form['projectFilepath']
    # your code
    # return a response
Set the form’s action to that view’s URL using url_for:
<form action="{{ url_for('handle_data') }}" method="post">
    <input type="text" name="projectFilepath">
    <input type="submit">
</form>
