Python Django URL重定向
如何将与其他URL不匹配的流量重定向回主页 url.py:Python Django URL重定向,python,django,django-urls,Python,Django,Django Urls,如何将与其他URL不匹配的流量重定向回主页 url.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.vi
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重定向。您可以尝试名为
如果您像我一样被困在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'}),
(r'^match_folder/(?P.*),'django.views.generic.simple.redirect_to',{'url':'/new_folder/%(path)s'),
如果您只是尝试修改url路由,而没有访问.htaccess等的权限(我在Appengine上,app.yaml不允许像.htaccess那样在该级别进行url重定向),则这比django.shortcuts.redirect更可取。另一种方法是使用HttpResponsePermanentRedirect,如下所示: In view.py
def url_redirect(request):
return HttpResponsePermanentRedirect("/new_url/")
在url.py中
url(r'^old_url/$', "website.views.url_redirect", name="url-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
,您可以使用模式\u name
,这有点不自然,可以确保您更改url,您不必也更改重定向。其他方法工作正常,但您也可以使用旧的django.shortcut.redirect
下面的代码取自
在Django 2.x中:
我添加了这个,但刚刚得到一个HTTP 500错误?url(r'^.*$',RedirectView.as_view(url='macmon'u about',permanent=False)您似乎缺少一个“)”,侧边滚动到末尾,您将看到它。您可以省略
名称
部分though@felix001顺便说一句,HTTP 500通常(在99%的情况下)意味着您有语法错误,请看这个-。当一个站点正在开发时,最好有DEBUG=True
或至少设置ADMINS
选项-如何传递slug并使用该字段创建重定向url。例如:url(r'^(?P[a-zA-Z0-9-]+])/,RedirectView.as_view(url='http://'+slug+'.mywebsite.com',permanent=False),注意使用此方法很容易让用户陷入重定向循环。Django的新版本中不推荐或删除了此旧格式,但是,在使用RedirectView进行重定向时,仍然可以使用url关键字,如接受答案中所述。示例:(r'^match\u folder/(?P.*)/$),重定向视图。作为视图(url='/new\u folder/%(path)s/',permanent=True),name='view-name'),
url(r'^old_url/$', "website.views.url_redirect", name="url-redirect"),
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))
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')),
]