2013-02-19 25 views
76

मैं यातायात कि does not वापस मुख पृष्ठ पर मेरे अन्य यूआरएल की किसी से मेल कैसे अनुप्रेषित कर सकते हैं। मेरे urls.py, की तरह लग रहाDjango URL रीडायरेक्ट

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

धन्यवाद के माध्यम से रीडायरेक्ट करना चाहते हैं,

उत्तर

131

आप वर्ग आधारित देखें कोशिश कर सकते हैं कहा जाता 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') 
) 

सूचना कैसेमें के रूप में आपको वास्तव में यूआरएल निर्दिष्ट करने की आवश्यकता है।

permanent=False HTTP 302 वापस आ जाएगी, जबकि permanent=True HTTP वापस आ जाएगी 301

वैकल्पिक रूप से आप django.shortcuts.redirect

+1

यूआरएल conf में वर्ग आधारित विचारों के लिए +1। –

+0

मैं कक्षा आधारित विचारों की सलाह देना हमेशा भूल रहा हूं +1 – danodonovan

+0

मैंने इसे जोड़ा लेकिन अभी एक HTTP 500 त्रुटि मिली है? यूआरएल, पक्ष अंत करने के लिए स्क्रॉल (आर '^। * $', RedirectView.as_view (यूआरएल = 'macmon_about', स्थायी = false) – felix001

8

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

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

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

+2

धन्यवाद, दूसरे संस्करण ने मुझे बहुत मदद की :) –

6

यह ऐसा करने का एक और तरीका है तो तरह HttpResponsePermanentRedirect उपयोग कर रहा है:

में view.py

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

url.py में

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

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 है, जो थोड़ा अन-सूखी है उपयोग कर सकते हैं, और आप अपने यूआरएल को बदलने सुनिश्चित करेगा, तो आप रीडायरेक्ट भी बदलने के लिए नहीं है।

+1

मुझे यह पसंद है! Django 1.10 के लिए अभी भी काम करता है :) – teewuane

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

  • कोई संबंधित समस्या नहीं^_^