#はじめに
pythonでwebアプリケーションを作成しているときに(flaskで),なんかいまいちflaskのルートについて理解できなかったので備忘録兼実験を含めて書いていきましたよ.いかに結論的なコードを示しておきます.
#test.py
from flask import Flask,render_template
app = Flask(__name__)
@app.route('/')
def index():
return render_template('index.html')
@app.route('/mayo')
def senbei():
return 'I like senbei.'
if __name__=='__main__':
app.run(debug=True)
<!--index.html-->
<html>
<head>
<head>
<body>
<a href="{{url_for('senebi')}}"><h1>Hello</h1></a>
</body>
</html>
#結論から申し上げるでござる
###1. @app.route()の引数にはURL
###2. url_for()の中身は呼び出したい関数名
を入れるべし.くわしい仕様はドキュメントを見てね.
#1. @app.route()の引数にはURL
例えばURLに
http://127.0.0.1:5000/
となります.また
http://127.0.0.1:5000/mayo
となります.これはsenbei関数の中で実装している言葉ですね!つまりURLにいれるその値を入れたら呼び出される関数をその
@app.route()
の中で定義しているんですね.
_ではここでURLのエンドポイントに関数名index
とsenbei
を入れてみる_とそれぞれ
となり,何も呼び出されないことがわかります(main.pyからは)
つまり,@app.route()の引数はブラウザのURL!!
#2. url_for()の中身は呼び出したい関数名
ただし,url_for()という関数は名前がurlとかついてるくせに引数は呼び出したい関数名なんですな.だから以下のようにするとリンク先に正常に行く
<a href="{{url_for('senbei')}}"><h1>Hello</h1></a>
先ほどの逆で,url_forの中身を以下のように@app.route()の引数(すなわちブラウザに打ち込むURL)にしてみると
<a href="{{url_for('/')}}"><h1>Hello senbei!</h1></a>
<!-- or -->
<a href="{{url_for('/mayo')}}"><h1>Hello senbei!</h1></a>
つまりurl_for
の中身は関数名!!
こんなちんけな内容でも誰かの役に立つといいです...