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

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

Метод 'перенаправления' принимает в качестве аргумента: URL-адрес, на который вы хотите быть перенаправлен, в виде строки имени представления.

Myapp / views пока выглядит следующим образом:

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):
   """ A view that display an article based on his 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 / article'. Для этого myapp / view.py изменится на -

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):
   """ A view that display an article based on his 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)

В приведенном выше примере сначала мы импортировали перенаправление из django.shortcuts, а для перенаправления на официальный сайт Django мы просто передаем полный URL-адрес методу перенаправления в виде строки, а для второго примера (представление viewArticle) перенаправление Метод принимает имя представления и его параметры в качестве аргументов.

Доступ к / myapp / hello даст вам следующий экран -

И доступ к / myapp / article / 42 даст вам следующий экран -

Также можно указать, является ли «перенаправление» временным или постоянным, добавив параметр constant = True. Пользователь не увидит разницы, но это детали, которые поисковые системы принимают во внимание при ранжировании вашего сайта.

Также помните, что параметр 'name' мы определили в нашем url.py при сопоставлении URL-адресов -

url(r'^articles/(?P\d{2})/(?P\d{4})/', 'viewArticles', name = 'articles'),

Это имя (здесь статья) можно использовать в качестве аргумента для метода 'перенаправления', тогда перенаправление нашей viewArticle может быть изменено с -

def viewArticle(request, articleId):
   """ A view that display an article based on his ID"""
   text = "Displaying article Number : %s" %articleId
   return redirect(viewArticles, year = "2045", month = "02")

To -

def viewArticle(request, articleId):
   """ A view that display an article based on his ID"""
   text = "Displaying article Number : %s" %articleId
   return redirect(articles, year = "2045", month = "02")

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