こんばんはエンジニアの眠れない夜です。
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")
http
やhttps
を取得できます。
組み合わせることでサイトの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やドメインの取得方法で困った時は是非参考にしてみてください。
コメントを残す