У меня есть приложение для фляги. В html-файле (fixtures.html) я получаю переменную от функции с именем fetchMatches(). Имя варибала - realData. Теперь я хочу передать эту полную переменную в действие под названием file, которое является placePred.
Это код функции, возвращающей шаблон html:
@app.route("/fetchMatches")
def fetchMatches():
if g.user:
dateBuild = []
wb = xlrd.open_workbook('betDeNoBanter.xlsx')
today = datetime.date.today()
for sheet in wb.sheets():
dates = sheet.col_values(0, 1)
i=1
for date in dates:
date = datetime.datetime(*xlrd.xldate_as_tuple(date, wb.datemode)).date()
#if (str(date) != str(today)):
if date-today <= datetime.timedelta(0):
i = i+1
continue
if date-today == datetime.timedelta(1):
entry = {"dateId":i, "date":str(date)}
row = i
teamOne = str(sheet.cell_value(row, 1))
teamTwo = str(sheet.cell_value(row, 2))
gameWeek = str(sheet.cell_value(row, 3))
dateInsert = str(date)
info = {"row":row, "date": dateInsert, "teamOne": teamOne, "teamTwo": teamTwo, "gameWeek": gameWeek}
dateBuild.append(info)
i = i+1
continue
if date-today > datetime.timedelta(1):
i = i+1
continue
if len(dateBuild) == 0:
return "no match next day"
else:
return render_template("fixtures.html", realData=dateBuild)
else:
return redirect(url_for("login"))
Это шаблон
<table>
{% for data in realData %}
<tr>
<td>{{ data["row"] }}</td>
<td>{{ data["teamOne"] }}</td>
<td>{{ data["teamTwo"] }}</td>
<td>{{ data["gameWeek"] }}</td>
<td>id:</td>
<td>{{ data["row"] }}</td>
</tr>
{% endfor %}
</table>
<div>
If you enter +(number), it means pred is for team one to win, -(number) is for team two to win.
<form action = "/placePred" method = "post">
<input type = "number" name = "pred">
<input type = "hidden" value = {{ realData }} name = "realData">
<input type = "submit">
</form>
</div>
И это функция, в которой я хочу иметь переменную (массив):
@app.route("/placePred", methods = ["POST"])
def placePreds():
if g.user:
email = g.user
number = request.form["pred"]
idList = []
idsAllowed = request.form["realData"]
for id in idsAllowed:
idList.append(id)
return jsonify({'devices': idList})
if not(number in idListid):
return "Invalid bet"
cursor = conn.cursor()
query = "select * from bets where email = '" + str(email) + "' and sheet_id = '" + str(abs(int(number))) + "'"
cursor.execute(query)
if cursor.rowcount != 0:
return "You havev already placed a bet on this fixture, fuck off!"
if int(number) > 0:
teamWin = 1
elif int(number) < 0:
teamWin = 2
else:
return redirect(url_for("login"))
query = "insert into bets values(default, '" + str(email) + "', '" + str(teamWin) + "', 20, " + str(abs(int(number))) + ")"
cursor.execute(query)
conn.commit()
return redirect(url_for("fetchMatches"))
else:
return redirect(url_for("login"))






Вам нужно определить переменная маршрута, вот как это должно работать. Показываю только актуальные части:
placePreds() должен получать данные, поэтому вы определяете переменную:
@app.route("/placePred<data>", methods = ["POST"])
def placePreds(data):
# do something with data here ...
В форме вы передаете реальные данные следующим образом:
<form action = "{{ url_for('placePreds', data=realData) }}" method = "post">
Это в форме диктовки? Просто введите его в dict.
Спасибо, но он передается в виде строки. Любой способ принять его как массив или json?