जवाबों:
यह आसान है:
from django.http import HttpResponseRedirect
def myview(request):
...
return HttpResponseRedirect("/path/")
आधिकारिक Django डॉक्स में अधिक जानकारी
अपडेट: Django 1.0
जाहिर तौर पर Django में इसका उपयोग करने का एक बेहतर तरीका है generic views
।
उदाहरण -
from django.views.generic.simple import redirect_to
urlpatterns = patterns('',
(r'^one/$', redirect_to, {'url': '/another/'}),
#etc...
)
सामान्य विचार प्रलेखन में अधिक है । क्रेडिट - कार्ल्स बैरोबेस ।
अपडेट # 2: Django 1.3+
Django में 1.5 redirect_to अब मौजूद नहीं है और इसे RedirectView द्वारा बदल दिया गया है । योनतन को श्रेय
from django.views.generic import RedirectView
urlpatterns = patterns('',
(r'^one/$', RedirectView.as_view(url='/another/')),
)
redirect
है django.shortcuts
?
('^pattern/$', lambda x: redirect('/redirect/url/'))
आप जो चाहते हैं उसके आधार पर (यानी यदि आप कोई अतिरिक्त पूर्व-प्रसंस्करण नहीं करना चाहते हैं), तो यह केवल Django के redirect_to
सामान्य दृश्य का उपयोग करने के लिए सरल है :
from django.views.generic.simple import redirect_to
urlpatterns = patterns('',
(r'^one/$', redirect_to, {'url': '/another/'}),
#etc...
)
अधिक उन्नत उदाहरणों के लिए प्रलेखन देखें ।
Django के लिए 1.3+ उपयोग:
from django.views.generic import RedirectView
urlpatterns = patterns('',
(r'^one/$', RedirectView.as_view(url='/another/')),
)
वहाँ वास्तव में एक रीडायरेक्ट के लिए एक दृश्य की तुलना में एक सरल तरीका है - आप यह कर सकते हैं सीधे में urls.py
:
from django.http import HttpResponsePermanentRedirect
urlpatterns = patterns(
'',
# ...normal patterns here...
(r'^bad-old-link\.php',
lambda request: HttpResponsePermanentRedirect('/nice-link')),
)
एक लक्ष्य एक कॉल करने योग्य और साथ ही एक स्ट्रिंग हो सकता है , जो कि मैं यहां उपयोग कर रहा हूं।
redirect_to
जेनजेन के साथ आने वाले सामान्य दृश्य का उपयोग करना अभी भी सरल और अधिक पठनीय है। Carles answer stackoverflow.com/questions/523356/python-django-page-redirect/…
Django 1.1 के बाद से, आप सरल पुनर्निर्देशित शॉर्टकट का भी उपयोग कर सकते हैं :
from django.shortcuts import redirect
def myview(request):
return redirect('/path')
यह एक वैकल्पिक स्थायी = सही कीवर्ड तर्क भी लेता है।
यदि आप एक पूरे सबफ़ोल्डर को पुनर्निर्देशित करना चाहते हैं , तो RedirectViewurl
में तर्क वास्तव में प्रक्षेपित है , इसलिए आप इसमें कुछ कर सकते हैं 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)
यदि आप क्वेरी स्ट्रिंग को भी कॉपी करना चाहते हैं तो आप भी कर सकते हैं ।
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 में रहता है
खबरदार। मैंने यह एक विकास सर्वर पर किया था और बाद में इसे बदलना चाहता था।
मुझे इसे बदलने के लिए अपने कैश को साफ करना पड़ा। भविष्य में इस सिर-खरोंच से बचने के लिए, मैं इसे इस तरह अस्थायी बनाने में सक्षम था:
from django.views.generic import RedirectView
url(r'^source$', RedirectView.as_view(permanent=False,
url='/dest/')),
आप इसे व्यवस्थापक अनुभाग में कर सकते हैं। इसे डॉक्यूमेंटेशन में बताया गया है।
https://docs.djangoproject.com/en/dev/ref/contrib/redirects/
यह 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'),
....
)
आप इस समाधान के साथ हार्ड कोडित url के बजाय url पैटर्न के नाम का उपयोग कर सकते हैं। Url से location_id पैरामीटर को लैम्ब्डा फ़ंक्शन के लिए नीचे दिया गया है।