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-адрес представления, скомпилированного с любым переданным аргументом.