我怎样才能重定向流量不匹配任何我的其他的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重定向。
您可以尝试基于类的视图称为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
在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
,这是一个有点未干的,并确保你改变你的网址,你不必改变重定向了。
如果你是卡在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)。
这样做是利用HttpResponsePermanentRedirect像这样的另一种方式:
在view.py
def url_redirect(request):
return HttpResponsePermanentRedirect("/new_url/")
在url.py
url(r'^old_url/$', "website.views.url_redirect", name="url-redirect"),