2009-02-07 18 views

उत्तर

230

यह सरल है: में official Django docs

अद्यतन

from django.http import HttpResponseRedirect 

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

और जानकारी: Django 1.0

वहाँ जाहिरा तौर पर Django में यह कर अब generic views का उपयोग करने का एक बेहतर तरीका है।

उदाहरण -

from django.views.generic.simple import redirect_to 

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

    #etc... 
) 

वहाँ generic views documentation में अधिक है। क्रेडिट - Carles Barrobés

अद्यतन # 2: Django 1.3+

Django 1.5 redirect_to में अब मौजूद नहीं है और RedirectView ने ले लिया है। क्रेडिट वास्तव में से प्रत्येक के लिए एक दृश्य की तुलना में एक सरल तरीका है Yonatan

from django.views.generic import RedirectView 

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

यह अब Django 1.0 के रूप में सबसे अच्छी विधि नहीं है। यह उत्तर देखें: http://stackoverflow.com/questions/523356/python-django-page-redirect/3841632#3841632 – Jake

+2

'django.shortcuts' से' redirect' का उपयोग क्यों नहीं करें? –

+4

मैं '('^ पैटर्न/$', लैम्ब्डा एक्स: रीडायरेक्ट ('/ रीडायरेक्ट/यूआरएल /') का उपयोग करता हूं)' – mrmagooey

38

को अनुप्रेषित - आप इसे कर सकते हैं सीधेurls.py में:

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, जो कि मैं यहाँ क्या उपयोग कर रहा हूँ ।

from django.shortcuts import redirect 

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

यह भी एक वैकल्पिक स्थायी = सच कीवर्ड तर्क लेता है:

+2

सच के लिए धन्यवाद, लेकिन dpgango के साथ आने वाले 'redirect_to' जेनेरिक व्यू का उपयोग करना अभी भी सरल और अधिक पठनीय है। Carles उत्तर http://stackoverflow.com/questions/523356/python-django-page-redirect/3841632#3841632 – Day

25

Django 1.1 के बाद से, आप भी सरल redirect शॉर्टकट का उपयोग कर सकते हैं।

from django.views.generic.simple import redirect_to 

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

    #etc... 
) 

अधिक उन्नत उदाहरण के लिए documentation देखें:

112

आप क्या चाहते हैं पर निर्भर करता है (अर्थात, अगर आप किसी भी अतिरिक्त पूर्व प्रसंस्करण करने के लिए नहीं करना चाहते हैं), यह आसान सिर्फ Django के redirect_to सामान्य दृश्य का उपयोग करने के लिए है।


Django 1.3+ उपयोग के लिए:

from django.views.generic import RedirectView 

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

+1 अपने आप को लागू करने के बजाए एक सामान्य दृश्य का उपयोग करने के लिए देखें (चाहे कितना आसान हो) (वर्तमान में)) शीर्ष मतदान जवाब। – Day

+0

क्या आपके पास कोई उदाहरण है यदि आप * अतिरिक्त * प्री-प्रोसेसिंग करना चाहते हैं? – niallsco

+1

तो मैं सुझाव दूंगा कि या तो एक कस्टम व्यू लिखें जो प्रसंस्करण करता है और फिर जेनेरिक व्यू को कॉल करता है, या सजावट लिखता है उदा। pre_process और जेनेरिक व्यू को सजाने के लिए: (आर '^ एक/$', pre_process (redirect_to), {'url': '/ another /'}) –

10

Django संस्करण 1.3 के साथ, वर्ग आधारित दृष्टिकोण है:

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'), 
) 

यह उदाहरण urls.py में में रहती है

1

आप इसे व्यवस्थापक अनुभाग में कर सकते हैं। यह दस्तावेज़ीकरण में समझाया गया है।

https://docs.djangoproject.com/en/dev/ref/contrib/redirects/

+0

हालांकि मेरे प्रश्न से काफी प्रासंगिक नहीं है, यह अभी भी जानकारी का एक दिलचस्प हिस्सा है। –

6

खबरदार। मैंने इसे विकास सर्वर पर किया और बाद में इसे बदलना चाहता था।

मैं अपने कैश स्पष्ट करने के लिए इसे बदलने के लिए किया था। आदेश में इस सिर खरोंच भविष्य में से बचने के लिए, मैं इसे अस्थायी इसलिए की तरह बनाने के लिए कर रहा था:

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 में परिभाषित

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

'deletePool' के लिए ठीक है? यह जवाब एक गलत जगह कॉपी-एन-पेस्ट की तरह लगता है ... –

12

आप एक पूरे रीडायरेक्ट करने के लिए चाहते हैं सबफ़ोल्डर, RedirectView is actually interpolated में url तर्क है, तो आप कुछ इस तरह urls.py में कर सकते हैं:

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')), 
] 

?P<path> आपको कैप्चर किया जाएगा RedirectView में खिलाया जाएगा। इस कैप्चर वैरिएबल को url तर्क में बदल दिया जाएगा, जो आपको दिया गया था, /new_path/yay/mypath यदि आपका मूल पथ /old/yay/mypath था।

यदि आप क्वेरी स्ट्रिंग को भी प्रतिलिपि बनाना चाहते हैं तो आप ….as_view(url='…', query_string=True) भी कर सकते हैं।

0

यह Django के सबसे संस्करणों में काम करना चाहिए, मैं इसे 1.6.5 में उपयोग कर रहा हूँ:

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'), 
    .... 
) 

आप अभी भी इस समाधान के साथ एक हार्ड कोडित यूआरएल के बजाय यूआरएल ढांचा के नाम का उपयोग कर सकते हैं। यूआरएल से location_id पैरामीटर लैम्ब्डा फ़ंक्शन पर पास किया जाता है।

संबंधित मुद्दे