Django URL पुनर्निर्देशित


101

मैं ऐसे ट्रैफ़िक को कैसे पुनर्निर्देशित कर सकता हूं जो मेरे किसी अन्य URL से मुखपृष्ठ पर वापस मेल नहीं खाता है?

urls.py:

urlpatterns = patterns('',
    url(r'^$', 'macmonster.views.home'),
    #url(r'^macmon_home$', 'macmonster.views.home'),
    url(r'^macmon_output/$', 'macmonster.views.output'),
    url(r'^macmon_about/$', 'macmonster.views.about'),
    url(r'^.*$',  'macmonster.views.home'),
)

जैसा कि यह खड़ा है, अंतिम प्रविष्टि होम पेज पर सभी "अन्य" ट्रैफ़िक भेजती है लेकिन मैं HTTP 301 या 302 के माध्यम से पुनर्निर्देशित करना चाहता हूं ।

जवाबों:


181

आप क्लास बेस्ड व्यू को ट्राई कर सकते हैं RedirectView

from django.views.generic.base import RedirectView

urlpatterns = patterns('',
    url(r'^$', 'macmonster.views.home'),
    #url(r'^macmon_home$', 'macmonster.views.home'),
    url(r'^macmon_output/$', 'macmonster.views.output'),
    url(r'^macmon_about/$', 'macmonster.views.about'),
    url(r'^.*$', RedirectView.as_view(url='<url_to_home_view>', permanent=False), name='index')
)

ध्यान दें कि जैसा urlकि <url_to_home_view>आपको वास्तव में url को निर्दिष्ट करने की आवश्यकता है।

permanent=FalseHTTP 302 लौटाएगा, जबकि permanent=TrueHTTP 301 वापस आएगा।

वैकल्पिक रूप से आप उपयोग कर सकते हैं django.shortcuts.redirect

Django 2+ संस्करणों के लिए अद्यतन

Django 2+ के साथ, url()हटा दिया गया है और इसके द्वारा प्रतिस्थापित किया गया है re_path()। उपयोग url()नियमित अभिव्यक्तियों के साथ बिल्कुल वैसा ही है । नियमित अभिव्यक्ति की आवश्यकता के बिना प्रतिस्थापन के लिए, उपयोग करें path()

from django.urls import re_path

re_path(r'^.*$', RedirectView.as_view(url='<url_to_home_view>', permanent=False), name='index')

मैंने इसे जोड़ा लेकिन सिर्फ एक HTTP 500 त्रुटि मिली? url (r '^। * $', RedirectView.as_view (url = 'macmon_about', स्थायी = गलत)
felix001

1
आपको एक ")" याद आ रही है, साइड स्क्रॉल को अंत तक और आप इसे देखेंगे। आप छोड़ सकते हैं nameहिस्सा हालांकि
डीएमजी

1
@ felix001 btw, HTTP 500 आमतौर पर (99% समय के रूप में) का मतलब है कि आपके पास एक वाक्यविन्यास त्रुटि है, इस पर एक नज़र डालें - docs.djangoproject.com/en/dev/howto/error-reporting/… । जब कोई साइट विकास के अधीन होती है, तो हमेशा अच्छा होता है DEBUG = Trueया कम से कम ADMINSविकल्प निर्धारित करता है - docs.djangoproject.com/en/dev/ref/settings/#std:setting-ADMINS
dmg

मैं कैसे स्लग पास करूं और उस फ़ील्ड का उपयोग रीडायरेक्ट यूआरएल बनाने के लिए करूं। EXA: url (r '^ (?; P <slug> [a-zA-Z0-9 -] +) /', RedirectView.as_view (url = 'http: //'+slug+'my.wewewebsite.com', स्थायी = मिथ्या),)
रोशन

ध्यान दें कि इस विधि का उपयोग करके उपयोगकर्ता को पुनर्निर्देशित लूप में पकड़ा जाना आसान है।
स्माइलबॉम्ब

35

Django 1.8 में, यह मैंने कैसे किया।

from django.views.generic.base import RedirectView

url(r'^$', views.comingSoon, name='homepage'),
# whatever urls you might have in here
# make sure the 'catch-all' url is placed last
url(r'^.*$', RedirectView.as_view(pattern_name='homepage', permanent=False))

उपयोग करने के बजाय url, आप उपयोग कर सकते हैं pattern_name, जो थोड़ा अन-डीआरवाई है, और यह सुनिश्चित करेगा कि आप अपने यूआरएल को बदल देंगे, आपको रीडायरेक्ट भी नहीं बदलना होगा।


11

यदि आप django 1.2 पर अटके हुए हैं जैसे मैं हूं और RedirectView मौजूद नहीं है, तो पुनर्निर्देशित मैपिंग को जोड़ने के लिए एक और मार्ग-केंद्रित तरीका उपयोग किया जा रहा है:

(r'^match_rules/$', 'django.views.generic.simple.redirect_to', {'url': '/new_url'}),  

आप एक मैच पर सब कुछ फिर से रूट कर सकते हैं। यह ऐप के फ़ोल्डर को बदलते समय उपयोगी है लेकिन बुकमार्क को संरक्षित करना चाहता है:

(r'^match_folder/(?P<path>.*)', 'django.views.generic.simple.redirect_to', {'url': '/new_folder/%(path)s'}),  

यह django.shortcuts.redirect के लिए बेहतर है यदि आप केवल अपने url रूटिंग को संशोधित करने का प्रयास कर रहे हैं और tohtaccess, आदि का उपयोग नहीं कर रहे हैं (मैं Appengine और app.yaml पर उस तरह url पुनर्निर्देशन की अनुमति नहीं देता हूँ .htaccess)।


3
यह पुराना प्रारूप Django के नए संस्करणों में पदावनत या हटा दिया गया है, लेकिन आप अभी भी url कीवर्ड का उपयोग कर सकते हैं, जब रीडायरेक्ट का उपयोग करके रीडायरेक्ट किया जाता है जैसा कि स्वीकृत उत्तर में वर्णित है। उदाहरण:(r'^match_folder/(?P<path>.*)/$', RedirectView.as_view(url='/new_folder/%(path)s/', permanent=True), name='view-name'),
मीका वाल्टर

9

ऐसा करने का दूसरा तरीका HttpResponsePermanentRedirect का उपयोग कर रहा है जैसे:

देखने में

def url_redirect(request):
    return HttpResponsePermanentRedirect("/new_url/")

Url.py में

url(r'^old_url/$', "website.views.url_redirect", name="url-redirect"),

8

अन्य तरीके ठीक काम करते हैं, लेकिन आप अच्छे पुराने का भी उपयोग कर सकते हैं django.shortcut.redirect

नीचे दिया गया कोड इस उत्तर से लिया गया था ।

Django में 2.x:

from django.shortcuts import redirect
from django.urls import path, include

urlpatterns = [
    # this example uses named URL 'hola-home' from app named hola
    # for more redirect's usage options: https://docs.djangoproject.com/en/2.1/topics/http/shortcuts/
    path('', lambda request: redirect('hola/', permanent=True)),
    path('hola/', include('hola.urls')),
]
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.