HTML-форма обновления фляги маршрута и дом - PullRequest
0 голосов
/ 27 августа 2018

У меня есть форма, которая может принимать имена «Игрок А» и «Игрок Б». Как только пользователь нажимает «Начать игру», запускается игра (которая была реализована как флеш-маршрут / игроки). Однако, после нажатия «Начать игру», я также хотел бы, чтобы «текст игрока» обновлялся с именами игроков. Это моя попытка, но она не работает. Мой d3.click не распознает событие. Есть ли способ сделать оба? Спасибо.

index.html:

<div>
<form method="POST" action="/players" role="form", name="playerform">
    <div class="form-group">
        <label for="playerA">Player A</label>
        <input type="text" class="form-control" id="playerA" name="playerA" placeholder="Player A">
    </div>
    <div class="form-group">
        <label for="playerB">Player B</label>
        <input type="text" class="form-control" id="playerB" name="playerB" placeholder="Player B">
   </div>
   <input type="submit" id="playerform" name="playerform" value="Start Game" class="btn btn-primary btn-lg">
</form>
</div>
<div id = "player-text"> </div>
<script type="text/javascript" src="../static/game.js"></script>

app.py:

@app.route("/players", methods=["GET", "POST"])
def send():
    global ds_game
    if request.method == "POST":
        playerA = request.form["playerA"]
        playerB = request.form["playerB"]
        #return jsonify({"playerA":playerA, "playerB" : playerB})
        return redirect("/index", code=302)

game.js

d3.select("#playerform")
    .on("click", function(){
        console.log("Clikecd on player form")
        d3.json("/show",($dict)=> {
            let $scores = $dict["scores"]
            let $player = $dict["player"]
            d3.select("#player_score").remove();
            d3.select("#player-text").append("div").attr("id","player_score")
            .append("p").attr("align","center").html($player)
            .append("p").attr("align","center").html($scores);
        });
    });

1 Ответ

0 голосов
/ 28 августа 2018

Проблема в том, что после отправки формы данные, которые вы собрали с помощью js, теряются, потому что js просто перезагружается вместе со страницей.

То, что вы могли бы сделать, - это сохранить значения, которые вы хотите отобразить, используя объект колбы session и использовать их в шаблоне, который вы возвращаете по перенаправленному пути.

Как это:

# ...
from flask import session

# Session needs SECRET_KEY to be set
app.config['SECRET_KEY'] = 'something secure'

# ...
def send():
  # ...
  session['players'] = {
    'A': playerA,
    'B': playerB
  }

# ...
def index():
  # ...
  return render_template('template.html', players=session['players'])

И в вашем файле шаблона вы можете ссылаться на них.

<!-- ... -->
<div id="player-text">
  {% if players %}
  <p>{{ players['A'] }}</p>
  <p>{{ players['B'] }}</p>
  {% endif %}
</div>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...