РЕПЕТИТОР математика физика информатика
Для школьников и студентов. Подтягивание пробелов. ЦЭ, ЦТ, ОГЭ, ЕГЭ.
Идет набор на ЛЕТО. Жмите для подробностей:)
363 of 818 menu

Класс HttpResponsePermanentRedirect

Класс HttpResponsePermanentRedirect является подклассом HttpResponseRedirect и предназначен для создания постоянного перенаправления с кодом состояния HTTP 301 Moved Permanently. Он применяется в представлениях, когда требуется перенаправить пользователя на другой URL-адрес на постоянной основе. В отличие от HttpResponseRedirect (код 302), постоянный редирект информирует поисковые системы о том, что страница перемещена навсегда, и вес ссылок передается новому адресу.

Конструктор класса принимает обязательный аргумент - целевой URL, на который будет выполняться перенаправление. URL может быть передан как строка с абсолютным или относительным путем. Также можно использовать именованные URL-пути совместно с функцией reverse или reverse_lazy для динамической генерации адреса.

Синтаксис

from django.http import HttpResponsePermanentRedirect HttpResponsePermanentRedirect(redirect_to, *args, **kwargs)

Параметры конструктора:

  • redirect_to - обязательный строковый параметр, задающий целевой URL для перенаправления;
  • *args и **kwargs - дополнительные аргументы, которые передаются родительскому классу HttpResponse.

Пример . С прямым указанием URL

Давайте создадим представление, которое перенаправляет пользователя на главную страницу при обращении к старому адресу:

from django.http import HttpResponsePermanentRedirect from django.views import View class OldPageRedirectView(View): def get(self, request): return HttpResponsePermanentRedirect('/')

Результат выполнения кода при переходе на старую страницу:

"HTTP 301 Moved Permanently" "Redirecting to /"

Пример . С использованием reverse

Теперь рассмотрим пример перенаправления на именованный URL-путь с использованием функции reverse:

from django.http import HttpResponsePermanentRedirect from django.urls import reverse from django.views import View class ArticleRedirectView(View): def get(self, request, article_id): return HttpResponsePermanentRedirect( reverse('article_detail', args=[article_id]) )

Результат выполнения кода при обращении к представлению с аргументом 42:

"HTTP 301 Moved Permanently" "Redirecting to /articles/42/"

Пример . С reverse_lazy для классов

При использовании классовых представлений часто применяют reverse_lazy для отложенного разрешения URL:

from django.http import HttpResponsePermanentRedirect from django.urls import reverse_lazy from django.views import View class CategoryRedirectView(View): redirect_url = reverse_lazy('category_list') def get(self, request, category_slug): return HttpResponsePermanentRedirect( self.redirect_url )

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

"HTTP 301 Moved Permanently" "Redirecting to /categories/"

Пример . С динамическими параметрами

Построим перенаправление с динамическими параметрами из запроса:

from django.http import HttpResponsePermanentRedirect from django.urls import reverse from django.views import View class UserProfileRedirectView(View): def get(self, request, old_username): new_username = old_username.lower() return HttpResponsePermanentRedirect( reverse('user_profile', args=[new_username]) )

Результат выполнения кода при старом имени пользователя 'JohnDoe':

"HTTP 301 Moved Permanently" "Redirecting to /users/johndoe/"

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

  • класс HttpResponseRedirect,
    который выполняет временное перенаправление (302)
  • функция redirect,
    которая является сокращенным способом создания редиректов
  • класс RedirectView,
    который предоставляет готовое классовое представление для редиректа
  • класс permanent,
    атрибут для настройки постоянности перенаправления в RedirectView
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить