質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Flask

FlaskはPython用のマイクロフレームワークであり、Werkzeug・Jinja 2・good intentionsをベースにしています。

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

Q&A

解決済

1回答

3467閲覧

flaskでボタンを3つ配置し、ボタンが押されたら指定のpythonのコードが実行されるようにしたい。

Aki1000

総合スコア78

Flask

FlaskはPython用のマイクロフレームワークであり、Werkzeug・Jinja 2・good intentionsをベースにしています。

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

0グッド

0クリップ

投稿2023/02/05 11:18

Flask今日触った初心者です。

flaskを使って表示されたページにボタンを複数配置し、ボタンが押されたら指定のpythonのコードが実行されるようにしたいです。

一つのボタンを配置してプログラムを実行するのは出来ました。
下は動いたコードです。
配置したボタンをクリックするとmotor_forward.pyを実行するという事が出来ました。

python

1from flask import Flask, render_template 2import motor_forward 3 4app = Flask(__name__) 5 6@app.route('/') 7def hello(): 8 return render_template('layout.html', title='tank App') 9 10@app.route('/Forward') 11def get(): 12 return motor_forward.main() 13 14 15if __name__ == "__main__": 16 # app.run(debug=True) 17 app.run(host='0.0.0.0')

templatesディレクトリに入れた表示するhtmlは下のように書きました。

html

1<!doctype html> 2<html> 3 4<head> 5 <title>{{ title }}</title> 6 <link rel="stylesheet" href="/static/css/index.css"> 7</head> 8 9<body> 10 <div class="member"> 11 12 <form method="GET" action="/Forward"> 13 <button type="submit" style="width:200px;height:100px">Forward</button> 14 </form> 15 16 </div> 17</body> 18 19</html>

このように一つボタンはこれで動くのですが、ボタンを三つ並べて、他のコードを呼び出したいです。
ボタンを三つ並べるのは下記のようにすれば並びましたが、どうやって他のコードを呼び出すか分かりません。

html

1<!doctype html> 2<html> 3 4<head> 5 <title>{{ title }}</title> 6 <link rel="stylesheet" href="/static/css/index.css"> 7</head> 8 9<body> 10 <div class="member"> 11 12 <form method="GET" action="/Forward"> 13 <button type="submit" style="width:200px;height:100px">Forward</button> 14 </form> 15 16 17 <form method="GET" action="/Stop"> 18 <button type="submit" style="width:200px;height:100px">Stop</button> 19 </form> 20 21 22 <form method="GET" action="/Back"> 23 <button type="submit" style="width:200px;height:100px">Back</button> 24 </form> 25 26 27 </div> 28</body> 29 30</html>

motor_stop.pyやmotor_back.pyが上記のStopボタンやBackボタンを押すと実行されるようにしたいです。

試しに、

python

1from flask import Flask, render_template 2import motor_forward 3 4app = Flask(__name__) 5 6@app.route('/') 7def hello(): 8 return render_template('layout.html', title='tank App') 9 10@app.route('/Forward') 11def get(): 12 return motor_forward.main() 13 14@app.route('/Stop') 15def get(): 16 # ↓ 実行したいファイルの関数 17 return motor_stop.main() 18 19@app.route('/Back') 20def get(): 21 # ↓ 実行したいファイルの関数 22 return motor_back.main() 23 24 25 26if __name__ == "__main__": 27 # app.run(debug=True) 28 app.run(host='0.0.0.0')

としらエラーで動きません。多分@app.routeというのは1個だけじゃないといけないっぽい?
AssertionError: View function mapping is overwriting an existing endpoint function:

どうやったら3つボタンを配置して、配置したボタンごとに実行するコードを割り当てることが出来るでしょうか?

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

@app.routeというのは1個だけじゃないといけないっぽい?

ではなく、同じ名前の関数を複数定義してしまっているのが問題です。 各routeを別の名前の関数にしましょう。

python

1@app.route('/Forward') 2def get_forward(): 3 # 略 4 5@app.route('/Stop') 6def get_stop(): 7 #略 8@app.route('/Back') 9def get_back(): 10 #略

投稿2023/02/05 12:10

TakaiY

総合スコア12765

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

Aki1000

2023/02/05 12:19

ありがとうございました!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問