Django的URL重定向(Django URL Redirect)

2019-07-20 04:24发布

我怎样才能重定向流量不匹配任何我的其他的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 301302重定向。

Answer 1:

您可以尝试基于类的视图称为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=False将返回HTTP 302,而permanent=True将返回HTTP 301。

或者您可以使用django.shortcuts.redirect



Answer 2:

在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 ,这是一个有点未干的,并确保你改变你的网址,你不必改变重定向了。



Answer 3:

如果你是卡在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路由,并没有获得为.htaccess,等等(我AppEngine上和app.yaml中不允许URL重定向在像该水平的.htaccess)。



Answer 4:

这样做是利用HttpResponsePermanentRedirect像这样的另一种方式:

在view.py

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

在url.py

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


文章来源: Django URL Redirect