Python+;Django页面重定向
如何实现简单的重定向(例如ColdFusion中的Python+;Django页面重定向,python,django,redirect,location,Python,Django,Redirect,Location,如何实现简单的重定向(例如ColdFusion中的cflocation,或Django中的头(位置:http://)(对于PHP)?很简单: from django.http import HttpResponseRedirect def myview(request): ... return HttpResponseRedirect("/path/") 更多信息请访问 更新:Django 1.0 在Django中,现在显然有一种更好的方法可以使用generic view 范
cflocation
,或Django中的头(位置:http://)
(对于PHP)?很简单:
from django.http import HttpResponseRedirect
def myview(request):
...
return HttpResponseRedirect("/path/")
更多信息请访问
更新:Django 1.0
在Django中,现在显然有一种更好的方法可以使用generic view
范例-
from django.views.generic.simple import redirect_to
urlpatterns = patterns('',
(r'^one/$', redirect_to, {'url': '/another/'}),
#etc...
)
未来还有更多。
信用-
更新#2:Django 1.3+
在Django 1.5中,重定向到不再存在,已被替换为。归功于
实际上,有一种比为每个重定向创建一个视图更简单的方法-您可以直接在
url.py
中执行此操作:
from django.http import HttpResponsePermanentRedirect
urlpatterns = patterns(
'',
# ...normal patterns here...
(r'^bad-old-link\.php',
lambda request: HttpResponsePermanentRedirect('/nice-link')),
)
from django.conf.urls.defaults import url
from django.views.generic import RedirectView
urlpatterns = [
url(r'^old/(?P<path>.*)$', RedirectView.as_view(url='/new_path/%(path)s')),
]
,这就是我在这里使用的。自Django 1.1以来,您还可以使用更简单的快捷方式:
from django.shortcuts import redirect
def myview(request):
return redirect('/path')
它还需要一个可选的permanent=True关键字参数。根据您的需要(即,如果您不想做任何额外的预处理),只需使用Django的
重定向\u到
通用视图即可:
from django.views.generic.simple import redirect_to
urlpatterns = patterns('',
(r'^one/$', redirect_to, {'url': '/another/'}),
#etc...
)
有关更高级的示例,请参见
对于Django 1.3+使用:
from django.views.generic import RedirectView
urlpatterns = patterns('',
(r'^one/$', RedirectView.as_view(url='/another/')),
)
对于Django版本1.3,基于类的方法是:
from django.conf.urls.defaults import patterns, url
from django.views.generic import RedirectView
urlpatterns = patterns('',
url(r'^some-url/$', RedirectView.as_view(url='/redirect-url/'), name='some_redirect'),
)
此示例位于url.py中,您可以在管理部分执行此操作。文档中对此进行了解释
def deletePolls(request):
pollId = deletePool(request.GET['id'])
return HttpResponseRedirect("/page_path/")
要当心。我在一个开发服务器上做了这项工作,并希望以后对其进行更改
from django.views.generic import RedirectView
url(r'^source$', RedirectView.as_view(permanent=False,
url='/dest/')),
page_path=在url.py中定义
def deletePolls(request):
pollId = deletePool(request.GET['id'])
return HttpResponseRedirect("/page_path/")
如果要重定向整个子文件夹,请单击中的
url
参数,以便在url.py
中执行类似操作:
from django.http import HttpResponsePermanentRedirect
urlpatterns = patterns(
'',
# ...normal patterns here...
(r'^bad-old-link\.php',
lambda request: HttpResponsePermanentRedirect('/nice-link')),
)
from django.conf.urls.defaults import url
from django.views.generic import RedirectView
urlpatterns = [
url(r'^old/(?P<path>.*)$', RedirectView.as_view(url='/new_path/%(path)s')),
]
从django.conf.url.defaults导入url
从django.views.generic导入重定向视图
URL模式=[
url(r'^old/(?P.*)$,重定向视图。作为_视图(url='/new_path/%(path)s')),
]
您捕获的
?p
将被送入重定向视图
。然后将在您给出的url
参数中替换此捕获的变量,如果原始路径为/old/yay/mypath
,则为我们提供/new\u path/yay/mypath
如果您还想复制查询字符串,也可以执行
…as_view(url='…',query_string=True)
。这应该适用于django的大多数版本,我在1.6.5中使用它:
from django.core.urlresolvers import reverse
from django.http import HttpResponseRedirect
urlpatterns = patterns('',
....
url(r'^(?P<location_id>\d+)/$', lambda x, location_id: HttpResponseRedirect(reverse('dailyreport_location', args=[location_id])), name='location_stats_redirect'),
....
)
从django.core.urlResolver反向导入
从django.http导入HttpResponseRedirect
urlpatterns=模式(“”,
....
url(r'^(?P\d+/$),lambda x,location\u id:HttpResponseRedirect(反向('dailreport\u location',args=[location\u id])),name='location\u stats\u redirect',
....
)
在这个解决方案中,您仍然可以使用url模式的名称,而不是硬编码的url。url中的location_id参数被传递给lambda函数。+1用于使用通用视图,而不是像(当前)中那样实现自己的视图(无论多么简单)得票最多的答案。如果你想做额外的预处理,有人有任何例子吗?那么我建议要么写一个进行处理的自定义视图,然后调用泛型视图,要么写一个装饰器,例如pre_进程和装饰泛型视图:(r'^one/$,pre_进程(重定向到),{'url':'/other/'})@niallsco:如果你想做额外的处理,那么最好使用Kennu在django 1.4中所描述的重定向快捷方式,导入redirect_将给出一个depracation警告。是的,但是使用django附带的
redirect_to
通用视图更简单,可读性更强。参见Carles的回答:从Django 1.0开始,这不再是最好的方法。查看此答案:为什么不使用来自django.shortcuts的redirect
?我使用(“^pattern/$”,lambda x:redirect(“/redirect/url/”)
这在django 1.5中已经被弃用了。改用“RedirectView”:它实际上没有被弃用,你说什么是弃用的?重新使用使用这种方法,我不知道如何将参数的值传递给lambda,即url(r'^(?P\d+/$),lambda x:HttpResponseRedirect(reverse('dailyreport_location',args=['%(location_id'),])不起作用,尽管与我的问题不太相关,但这仍然是一条有趣的信息。