eri*_*rip 2 html python routes flask
我正在开发一个简单的用户界面来通过 ID 启动和停止游戏。我写的基本HTML如下(game_id由JS填充):
<div align="center" class="top">
<div align="left" class="game-id-input">
Game ID: <input type="text" name="game_id" id="game_id">
</div>
<div align="right" class="buttons">
<form action="{{ url_for('start_game', game_id=game_id) }}" method="get">
<input type="submit" name="start" value="Start game" class="btn btn-success"></input>
</form>
<form action="{{ url_for('end_game', game_id=game_id) }}" method="get">
<input type="submit" name="end" value="End game" class="btn btn-danger"></input>
</form>
</div>
</div>
Run Code Online (Sandbox Code Playgroud)
看起来像
我还为每种形式定义了 Flask 路由函数:
@app.route("/start_game/<game_id>")
def start_game(game_id):
# ...
@app.route("/end_game/<game_id>")
def end_game(game_id):
# ...
Run Code Online (Sandbox Code Playgroud)
在我的表单中,如何才能game_id与game_idfrom相对应#game_id?
目前,当我提交开始和结束游戏时,我收到“文件未找到”错误,因为它只是将文字附加<game_id>到路线。
我是网络开发新手。这应该是微不足道的,但我不知道要搜索什么。提前抱歉问这么简单的问题。
您尝试根据用户输入生成 url,但当 Jinja 在服务器端渲染模板时,用户输入不可用,它仅在客户端可用。因此,如果您想将游戏 ID 作为 URL 参数发布到 URL,则必须使用 JavaScript 在客户端构建该 URL。
对于您想要做的事情来说,这并不是真正必要的。您可以使用 获取命名输入的提交值request.form['name']。按钮就像任何其他输入一样,因此您可以命名它们以了解所采取的操作。
@app.route('/manage_game', methods=['POST'])
def manage_game():
start = request.form['action'] == 'Start'
game_id = request.form['game_id']
if start:
start_game(game_id)
else:
stop_game(game_id)
return redirect(url_for('index'))
Run Code Online (Sandbox Code Playgroud)
@app.route('/manage_game', methods=['POST'])
def manage_game():
start = request.form['action'] == 'Start'
game_id = request.form['game_id']
if start:
start_game(game_id)
else:
stop_game(game_id)
return redirect(url_for('index'))
Run Code Online (Sandbox Code Playgroud)
即使这比您需要的更详细。鉴于您知道游戏是否已经在进行中,只需切换当前状态而不是选择操作。开始一个已经开始的游戏是没有意义的,只能停止它。
| 归档时间: |
|
| 查看次数: |
21988 次 |
| 最近记录: |