#python #forms #python-3.x #flask
#python #формы #python-3.x #flask
Вопрос:
Для моего первого проекта Flask я хотел создать базовое приложение Flask, используя API Riot Game для League of Legends. У меня вся обработка API работает, но у меня возникают проблемы с его выводом.
Я беру входные данные из формы на одной странице.
<form class="navbar-form navbar-left" action="{{ url_for('current_game_output') }}" method="POST">
<div class="form-group">
<input type="text" class="form-control" placeholder="Summoner Name" name="summoner_name">
<select class="form-control" name="region">
<option value="oce">Oceanic</option>
<option value="na">North America</option>
<option value="euw">Europe West</option>
</select>
</div>
<button type="submit" class="btn btn-default" value="Send">Submit</button>
</form>
И я пытаюсь вывести данные, возвращенные из API, на следующую страницу.
{% extends "header.html" %}
{% block body %}
<h3> Team 2 </h3>
<table class="table table-bordered" width="50%">
<tr>
<th width="48%">Summoner Name</th>
<th width="48%">Champion</th>
<th width="4%">Pic</th>
</tr>
{% for player in team1 %}
<tr>
<td>{{ player[0] }}</td>
<td>{{ player[1] }}</td>
<td><img width="20px" src="{{ url_for('static', filename='images/championIcons/') }}{{ player[1].replace(" ", "") }}_Square_0.png"></td>
</tr>
{% endfor %}
</table>
<h3> Team 1 </h3>
<table class="table table-bordered" width="50%">
<tr>
<th width="48%">Summoner Name</th>
<th width="48%">Champion</th>
<th width="4%">Pic</th>
</tr>
{% for player in team2 %}
<tr>
<td>{{ player[0] }}</td>
<td>{{ player[1] }}</td>
<td><img width="20px" src="{{ url_for('static', filename='images/championIcons/') }}{{ player[1].replace(" ", "") }}_Square_0.png"></td>
</tr>
{% endfor %}
</table>
{% endblock %}
Я бы хотел, чтобы URL-адрес страницы вывода был динамическим ‘/ currentgame / region / username’, но при попытке сделать это продолжают появляться ошибки.
Соответствующая часть моего views.py файл (скрытый мой ключ api):
@app.route('/header')
def header():
return render_template("header.html")
@app.route('/current')
def current():
return render_template("current.html")
@app.route('/currentgame/<region>/<name>', methods=['POST'])
def current_game_output(region, name):
region = request.form['region']
summoner_name = request.form['summoner_name']
api = RiotAPI('APIKEYGOESHERE', region)
team1, team2 = current_game_data(summoner_name, region, api)
return render_template("output.html",team1=team1,team2=team2)
Любая помощь / указания на наилучший способ вывода / возврата данных будут оценены.
Спасибо
Ответ №1:
Вы также должны опубликовать ошибку.
При быстром просмотре это должно быть исправлено:
@app.route('/currentgame/<string:region>/<string:name>', methods=['POST'])
def current_game_output(region, name):
region = request.form['region']
summoner_name = request.form['summoner_name']
api = RiotAPI('APIKEYGOESHERE', region)
team1, team2 = current_game_data(summoner_name, region, api)
return render_template("output.html",team1=team1,team2=team2)
Измените маршрут на /currentgame/<string:region>/<string:name>
Комментарии:
1. Хорошо, спасибо. Я попробовал предложенное вами исправление и получил «Внутреннюю ошибку сервера». Я просмотрел журналы, и в них были эти ошибки: pastebin.com/1d1zGP9W
2. @AConway Обновите ответ. Взгляните сейчас.
3. Спасибо, это решило эту ошибку. К сожалению, сейчас я получаю эту ошибку pastebin.com/hei1S4B0 . Есть ли где-нибудь, где я должен устанавливать переменные для URL? Спасибо
4. Эта ошибка связана с тем, что вы не указываете
region
иname
параметр в своей формеurl_for
.url_for('current_game_output' , region = some_val , name = some_other_val )
5. Спасибо, это исправило эту ошибку, но теперь я получаю ошибку 404 not found.