Как в Django выполнить перенаправление на другой URL

Ответ

Функция redirect из модуля django.shortcuts — это основной способ выполнить HTTP-перенаправление (редирект) в Django.

Она принимает различные аргументы (URL-путь, имя маршрута, объект модели) и возвращает экземпляр класса HttpResponseRedirect, который браузер интерпретирует как команду для перехода на новую страницу.

Основные способы использования:

  1. По имени URL-маршрута (рекомендуется): Наиболее надежный способ, так как он не зависит от конкретного URL-пути.
  2. По абсолютному или относительному пути: Прямое указание URL, например /articles/.
  3. По объекту модели: Если у модели определен метод get_absolute_url(), Django автоматически использует его для определения URL для редиректа.

Пример:

from django.shortcuts import redirect
from .models import Article

def my_view(request):
    # 1. Рекомендуемый способ: по имени URL из urls.py
    return redirect('articles:list')

    # 2. Альтернатива: по абсолютному пути
    # return redirect('/articles/')

    # 3. Перенаправление на страницу конкретного объекта
    # article = Article.objects.get(pk=1)
    # return redirect(article) # Требует наличия метода get_absolute_url() в модели

Временный (302) vs. Постоянный (301) редирект

По умолчанию redirect выполняет временное перенаправление (HTTP-статус 302). Чтобы сделать его постоянным (статус 301), что важно для SEO, используйте параметр permanent=True:

return redirect('articles:list', permanent=True)