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"),