Blog
  • Home
  • About
  • Contact

Редирект, переадресация или перенаправление Django

Date and time: Sept. 14, 2014, 12:56 p.m. | Category: Веб-разработка, Django

Рассмотрим способ, как можно сделать простейшую переадресацию на Django сайте, а также переадресацию с параметрами.

Начнём с самой простейшей переадресации без параметров. Для этого нам потребуется базовое представление RedirectView из модуля django.views.generic.base.

В urls.py необходимо указать шаблон переадресации подобным образом:

from django.views.generic.base import RedirectView

urlpatterns = patterns('',
	url(r'^$', RedirectView.as_view(url='posts/')), #1
	url(r'^blog/$', RedirectView.as_view(url='/posts/')), #2
	url(r'^google/$', RedirectView.as_view(url='http://google.com')), #3
)
Шаблон номер 1 выполняет переадресацию с site.com на site.com/posts/, номер 2 с site.com/blog/ на site.com/posts/, номер 3 с site.com/google/ на google.com, где site.com адрес вашего сайта.

Теперь рассмотри переадресацию с параметром. Для этого придётся писать своё представление, наследуя его от всё того же RedirectView. Пример представления (views.py):

from django.views.generic.base import RedirectView
from django.core.urlresolvers import reverse

class BlogToPostRedirectView(RedirectView):
	
	def get_redirect_url(self, pk):
		return reverse('detail_view', args=(pk,))
Данное представление выполняет переадресацию с site.com/blog/10/ на site.com/posts/10/, где число 10 может быть любым числом и передаётся в качестве параметра.

Urls.py в данном случае принимает следующий вид:

from yourprojectname import views

urlpatterns = patterns('',
	url(r'^blog/(?P\d+)/$', views.BlogToPostRedirectView.as_view()), #1
	url(r'^posts/(?P\d+)/$', views.PostDetailView.as_view(), name='detail_view'), #2
)

Работает это следующим образом:
- Пользователь переходит по ссылке, удовлетворяющей шаблону 1, например site.com/blog/10/;
- Вызывается метод BlogToPostRedirectView.as_view, а после чего BlogToPostRedirectView.get_redirect_url, в который в качестве аргумента передаётся pk, т.е. для данного примера 10;
- В методе get_redirect_url вызывается функция reverse, которая находит шаблон ссылки с именем detail_view и перенаправляет на него, подставляя в шаблон параметры из кортежа args.

comments powered by Disqus
Выберите язык:
  • Русский
  • English

  • Programming

    Python C++ JavaScript

    Web development

    Django ASP.NET

    Mobile development

    Windows Phone Android

    Game development

    Unity3d Blender

    Artem Ustimov © 2014