Back to Blog

Flaskのテンプレートでリンクを指定するurl_for()の使い方解説

flask

2024年11月6日

こんにちは!

Flaskでテンプレートを使用する際、リンクを動的に生成するためには、url_for()関数を使います。

この関数は、アプリケーション内のルートに基づいたURLを構築するためのもので、SEO対策やアプリケーションの保守性を高めるのに非常に役立ちます。

今回の記事では、url_for()の使い方を詳しく解説します。

そもそもリンクとは?

Flaskのurl_for()について解説する前に、リンクについて再確認しておきましょう。

Webページを他のページやリソースに接続するための要素

リンクとはWebページを他のページやリソースに接続するための要素です。

リンクをクリックすることで、ブラウザは指定されたURLに移動し、指定されたリソースを表示します。リンクは通常、以下のようなHTMLの<a>タグで表されます。

<a href="https://example.com">Visit Example</a>

上記のaタグはをクリックすると、example.comというサイトへ遷移します。

一般的には、遷移先のURLを直接指定します。

aタグでURLを直接指定するデメリット

Flaskでは、上記のようにaタグに直接URL指定する方法と、url_for()関数を使う2種類があります。

Flaskを使う場合、url_for()関数を使うことをおすすめします。

aタグにURLを直接指定するデメリットは、以下のようなことがあります。

  • URLが変更された際に、手作業で全て修正する必要がある。
  • 動的に生成されたパスには不向き。
  • パラメータ付きのリンクは手間がかかる。

url_for()関数を使うことで、上記のデメリットが解消されます。

例えば、/home/[ユーザー名]のようなユーザー名が動的に変わるURLのリンクを作成する場合に便利です。

url_for()の使い方

ここからは、url_for()の使い方について解説します。

url_for()の基本構文

url_for()関数は、指定したビュー関数に関連するURLを生成します。

基本的な構文は以下の通りです。

url_for('関数名', **パラメータ)

関数名は、Flaskアプリケーションで定義されたビュー関数の名前を指定します。**パラメータは、URLに必要な動的パラメータをキーワード引数として渡します。

例えば、以下のようなroute.pyがあったとします。home関数とprofile関数でルートを定義しています。

from flask import Flask, render_template

app = Flask(__name__)

@app.route('/')
def home():
    return render_template('index.html')

@app.route('/profile/<username>')
def profile(username):
    return f'Hello, {username}! This is your profile.'

if __name__ == '__main__':
    app.run(debug=True)

url_for()を使用することでhome関数に関連するリンクを作成することができます。

<a href="{{ url_for('home') }}">Home Page</a>

このリンクは、Flaskアプリケーションで@app.route(‘/’)で定義されたhomeビュー関数に関連付けられたURLを生成します。

パラメータを含むリンク

rl_for()を使用してURLにパラメータを追加する場合、パラメータはキーワード引数として渡します。

たとえば、profileという関数にusernameを渡すリンクは次のように書けます。

<a href="{{ url_for('profile', username='Tarou') }}">Profile Page</a>

Flaskアプリケーション内で、/profile/tarouというURLを生成します。

クエリパラメータを含むリンク

クエリパラメータを使用してリンクを作成したい場合も、url_for()は非常に便利です。

queryパラメータを追加したリンクの例は次のとおりです。

<a href="{{ url_for('search', query='Flask') }}">Search Flask</a>

/search?query=FlaskというURLが生成されます。

アンカー(id)を含むリンク

URLにアンカータグを追加するには、_anchor引数を使用します。

<a href="{{ url_for('home', _anchor='section1') }}">section1へ</a>

/#section1というURLが生成されます。

このようにurl_for()関数を利用します。

まとめ

今回の記事では、url_for()について解説しました。

url_for()関数はURLのリンクを生成する際に使用します。

url_for()は、ビュー関数名を指定するだけで、パラメータ付きの動的なリンクを生成でき、アプリケーション全体の保守性と柔軟性を大幅に向上させます。

SEOを意識したクリーンなURL設計と組み合わせることで、検索エンジンの評価を高めることができます。

今回の記事が参考になれば幸いです。ここまでお読みいただきありがとうございました。

             

Pythonの基礎から応用まで学べる
Python WebAcademy

Python WebAcademyでは、Pythonの基礎からアーキテクチャなどの応用的な内容まで幅広く学べます。また、ブラウザ上で直接Pythonコードを試すことができ、実践的なスキルを身につけることが可能です。

無料で試す