Создание пользовательского URL и вывод данных HTML-формы

#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.