【Flask】url_for()の使い方【Python】

【Flask】url_for()の使い方【Python】

最近、Pythonを使う人が増えてきた。それに伴い、フレームワークも充実してきていて、代表的なフレームワークに「Django」「Flask」がよく使われているようだ。

今回は、「Flask」を使う時の話で、ページリンク時にハマった話を記事にしておきたいと思う。

出典:http://www.photo-ac.com/

くせ者?url_for()の中身にご用心!!

似てるけど違う!?@app.route()はこう使う!

「Flask」を使う時、多くの人はこのように、Hello Flaskを書くだろう。

続いて、index.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冊を終えてから読むとかなりわかりやすく感動できると思います。

基礎 Python (IMPRESS KISO SERIES)

新品価格
¥6,200から
(2020/4/21 20:50時点)

入門 Python 3

新品価格
¥4,070から
(2020/4/21 20:53時点)

Effective Python ?Pythonプログラムを改良する59項目

新品価格
¥3,520から
(2020/4/21 20:52時点)

最後に、お勧めのプログラミングスクールのリストを記載しておきます。

独学だけでは、限界があります。プログラミング言語習得には、やはりメンターと呼ばれる教えてくれる人が必要です。メンターがいれば、挫折する確率がグンと低くなります。
スクール代金が1コース20万円としても、その後、ITエンジニアに就職したら、平均30万円以上は、稼げる確率が高いのですぐに元が取れますよね?
今一時の出し渋りにより、一生の賃金を損することになるか、倍以上手に出来るかは、自明ですよね?