Django में urls.py से सीधे url पैटर्न के नाम पर पुनर्निर्देशित करें?


128

Django में, मैं सीधे urls.py से एक सरल पुनर्निर्देशित कैसे कर सकता हूं? स्वाभाविक रूप से मैं एक अच्छी तरह से संगठित व्यक्ति हूं, DRY सिद्धांत का पक्षधर हूं, इसलिए मैं url कोडिंग के बजाय लक्ष्य को url पैटर्न के आधार पर प्राप्त करना चाहूंगा।

जवाबों:


194

यदि आप Django 1.4 या 1.5 पर हैं, तो आप यह कर सकते हैं:

from django.core.urlresolvers import reverse_lazy
from django.views.generic import RedirectView

urlpatterns = patterns('',
    url(r'^some-page/$', RedirectView.as_view(url=reverse_lazy('my_named_pattern'), permanent=False)),
    ...

यदि आप Django 1.6 या इसके बाद के संस्करण पर हैं, तो आप यह कर सकते हैं:

from django.views.generic import RedirectView

urlpatterns = patterns('',
    url(r'^some-page/$', RedirectView.as_view(pattern_name='my_named_pattern', permanent=False)),
    ...

Django 1.9 में, डिफ़ॉल्ट मान permanentट्रू से गलत में बदल गया है। इस कारण, यदि आप permanentकीवर्ड तर्क निर्दिष्ट नहीं करते हैं, तो आप यह चेतावनी देख सकते हैं:

हटाए गए InDjango1919 चेतावनी: 'RedirectView.permanent' का डिफ़ॉल्ट मान ट्रू से Django 1.9 में बदल जाएगा। इस चेतावनी को चुप करने के लिए एक स्पष्ट मूल्य निर्धारित करें।


18
बस ध्यान दें, याद रखें कि रीडायरेक्ट में डिफ़ॉल्ट रूप से स्थायी = सत्य है।
डैनियल बैकमैन

8
आप सब कुछ पुनर्निर्देशित कर सकते हैं! जैसे:(r'^.*/$', RedirectView.as_view(url='http://newurl.com')),
राडटेक '

3
RedirectView में स्थायी रूप से = Django 1.9 में डिफ़ॉल्ट रूप में गलत होगा।
ग्रेव

5
क्या कोई समझा सकता है कि उपरोक्त उदाहरण में 'my_onym_pattern' क्या है।
जय मोदी

1
दिए गए पैटर्न नाम का उपयोग करके कॉल समय पर आपके लिए रिवर्स निष्पादित करने का pattern_nameतर्क RedirectView। अन्य उपयोगी मापदंडों में शामिल हैं permanentऔरquery_string
टूटुज्जु

32

यह मेरे लिए काम करता है।

from django.views.generic import RedirectView

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

उपरोक्त उदाहरण में '/'इसका मतलब है कि यह इंडेक्स पेज पर रीडायरेक्ट करेगा, जहां आप किसी भी यूआरएल पैटर्न को भी जोड़ सकते हैं।


5
बस एक ध्यान दें, तो याद रखें कि RedirectViewहै permanent=TrueDjango के पुराने संस्करणों में डिफ़ॉल्ट के रूप में, और permanent=FalseDjango संस्करण> = 1.9 में डिफ़ॉल्ट के रूप में।
फ्लिम

21

django v2 + के लिए

from django.contrib import admin
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=False)),
    path('hola/', include("hola.urls")),
    path('admin/', admin.site.urls),
]

3
@ एली परमानेंट रीडायरेक्ट में आमतौर पर HTTP कोड 301 होता है, अस्थायी रीडायरेक्ट में आमतौर पर कोड 302 होता है। साइट के संरचनात्मक परिवर्तनों के ब्राउज़र को सूचित करने के लिए स्थायी रीडायरेक्ट का उपयोग किया जाता है। अस्थायी पुनर्निर्देशन का उपयोग एक नए पृष्ठ को इंगित करने के लिए किया जाता है जो कि डायनेमिक सर्वर साइड एक्शन जैसे लॉगिन के बाद दिखाया जाता है। प्रलेखन के अनुसार permanent=Falseडिफ़ॉल्ट है। अधिक जानकारी के लिए कृपया पढ़ें: docs.djangoproject.com/en/2.1/topics/http/shortcuts/#redirect developer.mozilla.org/en-US/docs/Web/HTTP/…
Glossator

9

यदि आप RedirectView का समर्थन नहीं कर सकते हैं तो यह तरीका django के पुराने संस्करणों में समर्थित है

देखने में

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

Url.py में

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

आप इसका उपयोग करके इसे स्थायी बना सकते हैं HttpResponsePermanentRedirect


8

मैं होम पेज पर सभी 404 को रीडायरेक्ट करने की कोशिश कर रहा था और निम्नलिखित महान काम कर रहा था:

from django.views.generic import RedirectView
...
under urlpatterns, added:
    url(r'^.*/$', RedirectView.as_view(url='/home/')),
    url(r'^$', RedirectView.as_view(url='/home/')),
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.