Omer G. Joel
Omer G. Joel

Reputation: 23

Passing radio button value on page refresh in Flask

I am trying to build a simple Flask app in Python with two radio buttons and a "refresh" button, where, on clicking on the refresh button, the page reloads and displays the radio button selection on the previous page.

Routes.py:

@app.route("/")
def display():
        return render_template("index.html", choice=choice)
    if request.form['submit'] == 'Refresh':
        choice= request.form.get("Choice")
        return redirect(url_for('/'))

index.html:

<html>
    <head>
        <title>Choice</title>
    </head>
    <body>
    <h2>Choice</h2>
    <hr>
    {{choice}}<br>
    <form action="">
        <input type="radio" name="Choice" value="Choice1"><span>Choice 1/span><br/>
        <input type="radio" name="Choice" value="Choice2"><span>Choice 2</span>
        <input type="submit" name="refresh" value="Refresh">
    </form><br>
</form> </body>
</html>

Upvotes: 0

Views: 1652

Answers (1)

Hanny
Hanny

Reputation: 51

Apply the below changes and check if it works!

render_template, request, redirect, url_for was used but not imported. Try to import them.

from flask import Flask, render_template, request, redirect, url_for

To retrieve POST data, you can use request.form. To retrieve GET data, you can use request.args.

Try the below code if you want to use request.args:

@app.route("/")
def display():
    choice = request.args.get('Choice','None Selected')
    return render_template("index.html", choice=choice)
    if request.args.get('refresh') == 'Refresh':
        return redirect(url_for('display',Choice=choice))

Try the below code if you want to use request.form:


@app.route("/",methods = ['POST', 'GET'])
def display():
    if request.method == 'GET':
        choice = request.args.get('Choice','None Selected')
        return render_template("index.html", choice=choice)
    if request.method == 'POST':
        choice= request.form.get("Choice")
        return redirect(url_for('display',Choice=choice))

In index.html add <form action="" method="POST"> to send the form data

Upvotes: 1

Related Questions