Метод build_absolute_uri

Метод build_absolute_uri применяется к объекту запроса HttpRequest и возвращает абсолютный URL в виде строки. Он принимает один необязательный параметр - относительный путь или полный URL, и на основе текущего запроса строит абсолютный URL с протоколом, доменом и портом. Метод полезен для генерации ссылок, которые будут отправлены в письмах, API-ответах или использованы в шаблонах, когда требуется полный URL, а не относительный путь.

Параметр метода может быть строкой, содержащей относительный путь (например, '/articles/') или полный URL (например, 'https://example.com/page/'). Если параметр не указан, метод возвращает абсолютный URL текущего запроса. Метод автоматически учитывает настройки SECURE_PROXY_SSL_HEADER и USE_X_FORWARDED_HOST для корректного определения протокола и хоста за прокси-серверами.

Синтаксис

pythonrequest.build_absolute_uri(location=None)

Пример

Давайте получим абсолютный URL текущей страницы, на которую был отправлен запрос:

pythonfrom django.http import HttpRequest

request = HttpRequest()
request.path = '/articles/2025/'
request.META['HTTP_HOST'] = 'example.com'
request.META['SERVER_PORT'] = '80'

absolute_url = request.build_absolute_uri()
print(absolute_url)

Результат выполнения кода:

python"http://example.com/articles/2025/"

Пример

Давайте создадим абсолютный URL для указанного относительного пути:

pythonfrom django.http import HttpRequest

request = HttpRequest()
request.path = '/profile/'
request.META['HTTP_HOST'] = 'example.com'
request.META['SERVER_PORT'] = '443'

absolute_url = request.build_absolute_uri('/articles/?page=2')
print(absolute_url)

Результат выполнения кода:

python"https://example.com/articles/?page=2"

Пример

Рассмотрим использование метода во view-функции для создания ссылки на страницу подтверждения регистрации:

pythonfrom django.shortcuts import render
from django.http import HttpRequest

def confirm_email(request, token):
  confirmation_link = request.build_absolute_uri(f'/confirm/{token}/')
  print(confirmation_link)
  return render(request, 'confirm.html', {'link': confirmation_link})

Результат выполнения кода при запросе на 'https://mysite.com/signup/':

python"https://mysite.com/confirm/abc123def/"

Пример

Метод также позволяет преобразовывать переданный полный URL, добавляя или заменяя параметры:

pythonfrom django.http import HttpRequest

request = HttpRequest()
request.META['HTTP_HOST'] = 'example.com'
request.META['SERVER_PORT'] = '8080'

full_url = request.build_absolute_uri('https://another-site.com/page/?id=5')
print(full_url)

Результат выполнения кода:

python"https://another-site.com/page/?id=5"

Смотрите также

  • метод get_full_path,
    который возвращает путь и строку запроса текущего запроса
  • атрибут path,
    который содержит путь запроса без параметров
  • атрибут headers,
    который содержит заголовки HTTP-запроса
  • метод is_secure,
    который определяет, был ли запрос отправлен по HTTPS