【Flask】url_for()の使い方【Python】
最近、Pythonを使う人が増えてきた。それに伴い、フレームワークも充実してきていて、代表的なフレームワークに「Django」「Flask」がよく使われているようだ。
今回は、「Flask」を使う時の話で、ページリンク時にハマった話を記事にしておきたいと思う。
くせ者?url_for()の中身にご用心!!
似てるけど違う!?@app.route()はこう使う!
「Flask」を使う時、多くの人はこのように、Hello Flaskを書くだろう。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
#test.py from flask import Flask,render_template app = Flask(__name__) @app.route('/') def index(): return render_template('index.html') @app.route('/hello') def hello(): return 'Hello Flask' # おまじない if __name__=='__main__': app.run(debug=True) |
続いて、index.htmlの記述は、テストなんでこんな感じだろう。
1 2 3 4 5 6 7 8 |
<!--index.html--> <html> <head> <head> <body> <a href="{{url_for('hello')}}"><h1>Hello World</h1></a> </body> </html> |
このような感じで、Pythonを走らせると、「127.0.0.1:5000」などで「Hello World」がブラウザで確認できたと思う。そして、HTMLで「Hello World」がAタグリンクしているので、それをクリックすると画面遷移が起こり、「127.0.0.1:5000/hello」というURLで、「Hello Flask」が表示されたと思います。
「url_for(‘hello’)」?「url_for(‘/hello’)」ではないの?
上記のソースを見たとき、ひょっとすると見出しのような疑問を感じたかもしれない。
それは、おそらく正常な感情で私もそう感じていた。まぁ、リファレンスを見ていればそういうものかと流すかもしれないが。
では、実際にHTMLのリンク部分を「url_for(‘/hello’)」に変更してリロードしてみよう。
すると、画面がエラーになる。おそらく、「werlzeug.routing.BuildError」とでかでかとブラウザ上に出ているのではないだろうか?
これは、バグではない。バグっているのは自分の感覚だ。
つまり、この記述では上手く動かない仕様になっているということだ。
url_for(関数名)と@app.route(URL)
この憲章から導き出せる答えは、以下の通りである。
- @app.route(URL)
- url_for(関数名)
初学者には似たような関数なので同じように使ってしまうかもしれないが、そうしてしまうとバグってしまうという話だ。
そして、気を付けたいのが、URLと関数名を同じにしたとき、うっかりミスで気づきにくいこともあると思う。(※今回のコードがまさにそれ)そういったところも自己防衛のために気を付けて命名されたい。
まとめ
この記事はどちらかと言うと初学者向けの記事なのかもしれない。
普通は、分かるのかもしれないが、ついついやってしまうのがプログラミングというもの。
公式のドキュメントを読めば数分で分かるのかもしれないが、ついつい調べるのを億劫になるのもプログラミングあるあるです。
結論としては、「url_for(関数)」というように丸暗記で良いかと思うのですが、個人的には良くないと思っている。なぜなら、物事にはすべて理由があるので、それをすっ飛ばしで覚えるのは、予期せぬトラブルに対処できなくなる恐れがあるからだ。
初学者が挫折したくなるのは、ホントにそれが多く、物事の意味をしっかり押さえてたら論理的に解決できる。だからこそ、丸暗記ですっ飛ばすのではなく、どうしてそれをしているのか考える、興味を持つ癖をつけてほしいと思う。
Pythonおすすめ書籍
最初の2冊は初心者向けです。Effectiv Pythonはこの2冊を終えてから読むとかなりわかりやすく感動できると思います。
|
|
|
最後に、お勧めのプログラミングスクールのリストを記載しておきます。
独学だけでは、限界があります。プログラミング言語習得には、やはりメンターと呼ばれる教えてくれる人が必要です。メンターがいれば、挫折する確率がグンと低くなります。
スクール代金が1コース20万円としても、その後、ITエンジニアに就職したら、平均30万円以上は、稼げる確率が高いのですぐに元が取れますよね?
今一時の出し渋りにより、一生の賃金を損することになるか、倍以上手に出来るかは、自明ですよね?
- TechAcademy [テックアカデミー]※スクールの数が多い!返金制度あり!
- 【WebCampPRO】※WEB系に特化したスクール!返金制度あり!
- 【CodeCamp】※無料体験レッスンを受講すると受講料が1万円OFF!
- Python 3 入門+アメリカのシリコンバレー流コードスタイル
- 【Web開発初心者向け!】Web開発入門完全攻略 充実の18時間コース※動画で学びたい人はこちら!格安もあり!
- フロントエンドエンジニアになりたい人の Webプログラミング入門