如何将与我的任何其他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'),
)
现在,最后一个条目将所有“其他”流量发送到主页,但我希望通过HTTP301或302进行重定向。
发布于 2013-02-19 21:57:50
您可以尝试名为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
,您需要实际指定url。
permanent=False
将返回HTTP302,而permanent=True
将返回HTTP301。
或者,您可以使用django.shortcuts.redirect
Django 2+版本的更新
在Django 2+中,url()
被废弃,取而代之的是re_path()
。用法与使用正则表达式的url()
完全相同。对于不需要正则表达式的替换,使用path()
。
from django.urls import re_path
re_path(r'^.*$', RedirectView.as_view(url='<url_to_home_view>', permanent=False), name='index')
发布于 2015-07-09 04:22:36
在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
,它有点不干练,可以确保你改变了你的url,你也不需要改变重定向。
发布于 2019-07-27 18:08:00
其他方法工作得很好,但您也可以使用老的django.shortcut.redirect
。
下面的代码取自this answer。
在Django 2.x中:
from django.shortcuts import redirect
from django.urls import path, include
urlpatterns = [
# this example uses named URL 'hola-home' from app named hola
# for more redirect's usage options: https://docs.djangoproject.com/en/2.1/topics/http/shortcuts/
path('', lambda request: redirect('hola/', permanent=True)),
path('hola/', include('hola.urls')),
]
https://stackoverflow.com/questions/14959217
复制相似问题