2009-02-07 42 views

cevap

230

Çok basit: official Django docs

Update

from django.http import HttpResponseRedirect 

def myview(request): 
    ... 
    return HttpResponseRedirect("/path/") 

diğer bilgiler: Django 1.0

görünüşte şimdi generic views kullanarak Django bunu yapmanın daha iyi bir yolu yoktur.

Örnek -

from django.views.generic.simple import redirect_to 

urlpatterns = patterns('', 
    (r'^one/$', redirect_to, {'url': '/another/'}), 

    #etc... 
) 

generic views documentation daha vardır. Kredi - Carles Barrobés.

Güncelleme # 2: Django 1.3+

redirect_to Django 1.5 olarak artık var ve RedirectView almıştır. Aslında her biri için bir görünüme sahip daha basit bir yolu var Yonatan

from django.views.generic import RedirectView 

urlpatterns = patterns('', 
    (r'^one/$', RedirectView.as_view(url='/another/')), 
) 
+8

Bu, artık Django 1.0'daki en iyi yöntem değildir. Bu cevaba bakın: http://stackoverflow.com/questions/523356/python-django-page-redirect/3841632#3841632 – Jake

+2

Neden 'django.shortcuts'dan' yönlendirme' kullanmıyorsunuz? –

+4

Kullanıyorum '('^ pattern/$', lambda x: yönlendirme ('/ yönlendirme/url /'))' – mrmagooey

38

Kredi yönlendirme - Bunun yapabilirsiniz doğrudanurls.py yılında: Burada kullanıyorum budur

from django.http import HttpResponsePermanentRedirect 

urlpatterns = patterns(
    '', 
    # ...normal patterns here... 
    (r'^bad-old-link\.php', 
    lambda request: HttpResponsePermanentRedirect('/nice-link')), 
) 

A target can be a callable as well as a string, . Ayrıca isteğe bağlı bir Doğru = kalıcı anahtar kelime argüman alır

from django.shortcuts import redirect 

def myview(request): 
    return redirect('/path') 

:

+2

için teşekkürler, ancak django ile gelen 'redirect_to' genel görünümünü kullanmak daha kolay ve okunabilir. Carles'in (şu an ne kadar basit olursa olsun) gerçekte olduğu gibi uygulamak yerine, genel bir görünüm kullanmak için http://stackoverflow.com/questions/523356/python-django-page-redirect/3841632#3841632 – Day

25

Django 1.1 için bir de daha basit redirect kısayol kullanabilirsiniz.

from django.views.generic.simple import redirect_to 

urlpatterns = patterns('', 
    (r'^one/$', redirect_to, {'url': '/another/'}), 

    #etc... 
) 

daha gelişmiş örnekler için documentation bakınız: (herhangi bir ek ön işlem yapmak için istemiyorsanız yani)

112

istediğini bağlı olarak, sadece Django'nın redirect_to jenerik görünümünü kullanmak daha basittir.

Django 1.3+ kullanımı için

:

from django.views.generic import RedirectView 

urlpatterns = patterns('', 
    (r'^one/$', RedirectView.as_view(url='/another/')), 
) 
+0

+1 yanıtına bakın.) en çok oylanan cevap. – Day

+0

Herhangi bir örnek var mı * Yapma * ek ön işleme yapmak ister misiniz? – niallsco

+1

Ardından, işlemeyi yapan ve daha sonra genel görünümü çağıran özel bir görünüm yazmanızı veya bir dekoratör yazmanızı öneririm. pre_process ve genel görünümü süsleyin: (r '^ bir/$', pre_process (redirect_to), {'url': '/ başka /'}) –

10

Django sürümü 1.3 ile, sınıf temelli bir yaklaşımdır:

from django.conf.urls.defaults import patterns, url 
from django.views.generic import RedirectView 

urlpatterns = patterns('', 
    url(r'^some-url/$', RedirectView.as_view(url='/redirect-url/'), name='some_redirect'), 
) 

Bu örnek urls.py içinde yaşıyor

6

sakının. Bunu bir geliştirme sunucusunda yaptım ve daha sonra değiştirmek istedim. Firefox 5 'caching' 301 redirects

  • bunu değiştirmek benim önbelleklerini temizlemek zorunda kaldı. Bu kafa kaşıma gelecekte kaçınmak için, bunu geçici şöyle yapmak başardı: =

    from django.views.generic import RedirectView 
    
    url(r'^source$', RedirectView.as_view(permanent=False, 
                 url='/dest/')), 
    
+0

1.5 Django –

1

page_path urls.py tanımlamak Eğer bir bütün yönlendirmek istiyorsanız

def deletePolls(request): 
    pollId = deletePool(request.GET['id']) 
    return HttpResponseRedirect("/page_path/") 
+2

'deletePool' için tamam mı? Bu cevap yanlış bir nüsha gibi görünüyor ... –

12

Alt klasör, RedirectView is actually interpolated yılında url argüman, yani urls.py böyle bir şey yapabilirsiniz:

from django.conf.urls.defaults import url 
from django.views.generic import RedirectView 

urlpatterns = [ 
    url(r'^old/(?P<path>.*)$', RedirectView.as_view(url='/new_path/%(path)s')), 
] 

Yakalamak RedirectView içine ?P<path> yakalanacaktır. Bu yakalanan değişken, orijinal yolunuz /old/yay/mypath ise /new_path/yay/mypath veren bize verdi url bağımsız değişkeni değiştirilir.

Sorgu dizesini de kopyalamak isterseniz, ….as_view(url='…', query_string=True) da yapabilirsiniz.

0

Bu django çoğu sürümlerinde çalışması gerekir, ben 1.6.5 bunu kullanıyorum:

from django.core.urlresolvers import reverse 
from django.http import HttpResponseRedirect 
urlpatterns = patterns('', 
    .... 
    url(r'^(?P<location_id>\d+)/$', lambda x, location_id: HttpResponseRedirect(reverse('dailyreport_location', args=[location_id])), name='location_stats_redirect'), 
    .... 
) 

Hala yerine bu çözüm ile sabit kodlanmış url'nin url modeli adı kullanabilirsiniz. Url'den location_id parametresi lambda işlevine geçirilir.