I am deploying variables using a logistic regression model using FLASK. The variables are correctly calculated in the app, and everything seems to work fine, with the little problem, that when I click the "Print team rates" button, the names of the "home team" and "away team" just disappear. I would like them to stay after displaying the prediction. Any idea? Thanks in advance.
Before clicking...
After clicking the button...
which makes no sense... I would like both names to stay.
<tr>
<form action="{{ url_for('predict')}}"method="post">
<td>
<div class="autocomplete" style="width:300px;">
<input id="home_team" type="text" name="team1" required="required" />
</div>
</td>
<td>
<div class="autocomplete" style="width:300px;">
<input id="away_team" type="text" name="team2" required="required" />
</div>
</td>
<button type="submit" class="btn btn-primary btn-block btn-large">Print team rates</button>
</form>
<td>
{{ winner }}
</td>
<td>
{{ value1 }}
</td>
<td>
{{ value2 }}
</td>
<td>
{{ value3 }}
</td>
</tr>
import numpy as np
from flask import Flask, request, render_template
import pickle
import pandas as pd
app = Flask(__name__)
model = pickle.load(open('logreg.pkl', 'rb'))
@app.route('/')
def home():
return render_template('index.html')
@app.route('/predict',methods=['POST'])
def predict():
int_features = [str(x) for x in request.form.values()]
final_features = np.array(int_features)
df = pd.read_csv('list_last_update.csv')
home_team = df[df['Name']==final_features[0]]
away_team = df[df['Name']==final_features[1]]
X1 = np.array(home_team[['OVA', 'ATT']])
X2 = np.array(away_team[['OVA', 'ATT']])
X = np.concatenate((X1, X2), axis=None).astype(int)
X = X.reshape(1, -1)
print('X1 = ', X1)
print('X2 = ', X2)
print('X = ', X)
prediction = model.predict(X)
prediction2 = model.predict_proba(X)
prob_home_win = round(prediction2[0,2],2)
prob_draw_game = round(prediction2[0,1],2)
prob_away_win = round(prediction2[0,0],2)
return render_template('index.html', winner = prediction, value1 = prob_home_win, value2 = prob_draw_game, value3 = prob_away_win) # here we tell him what variables we want to send to the html
if __name__ == "__main__":
app.run(host='0.0.0.0',port=8080)
Thanks in advance
You can pass a value to your inputs. .get('key','msg if key is not there')
. You can use request.form.get('team1', '')
<input id="home_team" type="text" value="{{ request.form.get('team1', '') }}" name="team1" required="required" />
<input id="away_team" type="text" value="{{ request.form.get('team2', '') }}" name="team2" required="required" />