Django URLredirect

如何将不符合任何其他url的stream量redirect到主页。 我的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'), ) 

现在,最后一项将所有“其他”stream量发送到主页,但我想通过HTTP 301或302redirect。

谢谢,

您可以尝试称为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_to_home_view>您需要真正指定url。

permanent=False将返回HTTP 302,而permanent=True将返回HTTP 301。

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

在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)) 

您可以使用pattern_name ,而不是使用url ,这有点un-DRY,并且可以确保您更改url,而不必更改redirect。

如果你像django 1.2一样被拦截,并且RedirectView不存在,那么另一种以路由为中心的方式来添加redirect映射:

 (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不允许在该级别的urlredirect,如的.htaccess)。

另一种方法是使用HttpResponsePermanentRedirect,如下所示:

在view.py中

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

在url.py中

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