English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية

Перенаправление страниц Django

Переадресация страниц в веб-приложениях необходима по многим причинам. Возможно, вы хотите перенаправить пользователя на другую страницу, когда происходит определенное действие или возникает ошибка. Например, когда пользователь заходит на веб-сайт, он часто перенаправляется на свою домашнюю страницу или личный面板. В Django использование перенаправления реализуется с помощью метода "redirect".

В методе "redirect" в качестве параметра необходима строка URL, к которой будет произведено перенаправление.

myapp/views до сих пор выглядит так −

# Файл: example.py
# Авторские права: 2020 By w3codebox
# Автор: ru.oldtoolbag.com
# Дата: 2020-08-08
def hello(request):
    today = datetime.datetime.now().date()
    daysOfWeek = ['Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat', 'Sun']
    return render(request, "hello.html", {"today": today, "days_of_week": daysOfWeek})
 
 def viewArticle(request, articleId):
    """Представление, отображающее статью на основе ее ID"""
    text = "Displaying article Number: %s" % articleId
    return HttpResponse(text)
 
 def viewArticles(request, year, month):
    text = "Displaying articles of : %s/%s"%(year, month)
    return HttpResponse(text)

Давайте изменим hello, чтобы перенаправлять на djangoproject.com, а viewArticle перенаправлять на наш внутренний '/myapp/articles'. myapp/view.py будет изменен следующим образом: 

# Файл: example.py
# Авторские права: 2020 By w3codebox
# Автор: ru.oldtoolbag.com
# Дата: 2020-08-08
from django.shortcuts import render, redirect
 from django.http import HttpResponse
 import datetime
 # Create your views here.
 def hello(request):
    today = datetime.datetime.now().date()
    daysOfWeek = ['Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat', 'Sun']
    return redirect("https://www.djangoproject.com")
 
 def viewArticle(request, articleId):
    """Представление, отображающее статью на основе ее ID"""
    text = "Displaying article Number: %s" % articleId
    return redirect(viewArticles, year = "2045", month = "02")
 
 def viewArticles(request, year, month):
    text = "Displaying articles of : %s/%s"%(year, month)
    return HttpResponse(text)

В этом примере мы сначала импортируем redirection (redirect) из Django. Удобный способ для перенаправления на официальный сайт Django, нам нужно использовать полный URL для метода «redirect» в виде строки, во втором примере (в методе viewArticle) передаем имя метода и его параметры.

При посещении /myapp/hello, будет отображаться следующий экран-

При посещении /myapp/article/42, будет отображаться следующий экран-

También se puede especificar si «redirect» es temporal o permanente, agregando el parámetro permanent = True. El usuario no notará la diferencia, pero estos son detalles que se tienen en cuenta al rankar sitios de búsqueda.

Мы определяем параметр «name» в url.py при маппинге URL.

# Файл: example.py
# Авторские права: 2020 By w3codebox
# Автор: ru.oldtoolbag.com
# Дата: 2020-08-08
url(r'^articles/(?P\d{2})/(?P\d{4})/', 'viewArticles', name = 'articles'),

Это имя (здесь статья) может использоваться в качестве аргумента метода "redirect", поэтому перенаправление viewArticle можно изменить -

# Файл: example.py
# Авторские права: 2020 By w3codebox
# Автор: ru.oldtoolbag.com
# Дата: 2020-08-08
def viewArticle(request, articleId):
    """Представление, отображающее статью на основе ее ID"""
    text = "Displaying article Number: %s" % articleId
    return redirect(viewArticles, year = "2045", month = "02")

Измените на −

# Файл: example.py
# Авторские права: 2020 By w3codebox
# Автор: ru.oldtoolbag.com
# Дата: 2020-08-08
def viewArticle(request, articleId):
    """Представление, отображающее статью на основе ее ID"""
    text = "Displaying article Number: %s" % articleId
    return redirect(articles, year = "2045", month = "02")

Примечание - Есть функция создания URL; она используется для перенаправления в том же порядке; метод "reverse" (django.core.urlresolvers.reverse). Эта функция не возвращает объект HttpResponseRedirect, а содержит только URL и любые переданные параметры для компиляции строки представления.