【Django】現在のURL、ドメイン名、ホスト名などを取得する方法

Django 現在のURL、ドメイン名、ホスト名などを取得する方法

こんばんはエンジニアの眠れない夜です。

Djangoを使っている時に現在のURLやドメイン名、ホスト名を取得したいということがありますよね。

そんな時に View やテンプレートでそれらを取得する方法をご紹介します。

※ 間違っているところなどありましたらご指摘くださいm(_ _)m

現在のURL、ドメイン名、ホスト名などを取得する方法

現在のページのパスを取得する

request.path

https://sleepless-se.net/my-post/にいる場合は/my-post/が返ってきます。

※ 関数ではないことに注意 request.path

ちなみに同じことをテンプレートでもできます。

{{ request.path }}

現在のページのパスとパラメータを取得する

https://sleepless-se.net/my-post/?param=1 にいる場合は

request.get_full_path()

これで/my-post/?param=1パスとパラメータを同時に取得できます。

テンプレートではこのように呼び出せます。

{{ request.get_full_path }}

ドメイン名を取得する

request.META.get("HTTP_HOST")

sleepless-se.netが返ってきます。

ドメイン名だけを利用するというシーンは少ないので次のプロトコルの取得を行うことで

request.META.get("HTTP_X_FORWARDED_PROTO")

httphttpsを取得できます。

組み合わせることでサイトのURLになります。

f'{request.META.get("HTTP_X_FORWARDED_PROTO")}://{request.META.get("HTTP_HOST")}

https://sleepless-se.netが返ってきます。

しかし、もっと簡単な方法があります。

request._current_scheme_host

を使うと同じように、サイトのURLを取得できます。

※ 関数ではないことに注意 request._current_scheme_host

https://sleepless-se.net

組み合わせる必要もなく、2つも値をとってこなくていいので request._current_scheme_host の方が断然便利です。

現在のページのURLをパラメータ付きで取得する方法

request.build_absolute_uri()

https://sleepless-se.net/my-post/?param=1

これでパラメータ付きで現在のURLを取得できます。

テンプレートではこのように呼び出せます。

{{ request.build_absolute_uri }}

まとめ

request.path # /my-post/
request.get_full_path() # /my-post/?param=1
request.META.get("HTTP_HOST") # sleepless-se.net
request.META.get("HTTP_X_FORWARDED_PROTO") # https
request._current_scheme_host # https://sleepless-se.net
request.build_absolute_uri() # https://sleepless-se.net/my-post/?param=1

現在のページのURLやドメインの取得方法で困った時は是非参考にしてみてください。

コメントを残す

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください