Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/331.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python Django URL重定向_Python_Django_Django Urls - Fatal编程技术网

Python Django URL重定向

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

如何将与其他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.views.about'),
    url(r'^.*$',  'macmonster.views.home'),
)

目前,最后一个条目将所有“其他”流量发送到主页,但我想通过HTTP 301302重定向。您可以尝试名为


如果您像我一样被困在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')),
]