如何在Django中完成简单的重定向(例如cflocation
在ColdFusion或header(location:http://)
PHP中)?
这很简单:
from django.http import HttpResponseRedirect def myview(request): ... return HttpResponseRedirect("/path/")
有关Django官方文档的更多信息
更新:Django 1.0
现在使用Django显然有更好的方法generic views
.
示例 -
from django.views.generic.simple import redirect_to urlpatterns = patterns('', (r'^one/$', redirect_to, {'url': '/another/'}), #etc... )
通用视图文档中还有更多内容.信用 - CarlesBarrobés.
更新#2:Django 1.3+
在Django 1.5中,redirect_to不再存在,并且已被RedirectView取代.感谢Yonatan
from django.views.generic import RedirectView urlpatterns = patterns('', (r'^one/$', RedirectView.as_view(url='/another/')), )
根据您的需要(即如果您不想进行任何其他预处理),只需使用Django的redirect_to
通用视图就更简单了:
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/')), )
实际上,每个重定向都有一个简单的方法 - 您可以直接在urls.py
以下位置执行此操作:
from django.http import HttpResponsePermanentRedirect urlpatterns = patterns( '', # ...normal patterns here... (r'^bad-old-link\.php', lambda request: HttpResponsePermanentRedirect('/nice-link')), )
目标可以是可调用的,也可以是字符串,这就是我在这里使用的.
从Django 1.1开始,您还可以使用更简单的重定向快捷方式:
from django.shortcuts import redirect def myview(request): return redirect('/path')
它还需要一个可选的permanent = True关键字参数.
如果要重定向整个子文件夹,RedirectView中的url
参数实际上是内插的,因此您可以在urls.py
以下位置执行以下操作:
from django.conf.urls.defaults import url from django.views.generic import RedirectView urlpatterns = [ url(r'^old/(?P.*)$', RedirectView.as_view(url='/new_path/%(path)s')), ]
在?P
您捕捉将被送入RedirectView
.这个捕获的变量将在url
您给出的参数中被替换,/new_path/yay/mypath
如果您的原始路径是,则为我们提供/old/yay/mypath
.
….as_view(url='…', query_string=True)
如果要复制查询字符串,也可以执行此操作.
使用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'), )
此示例位于urls.py中
谨防.我在开发服务器上执行此操作,并希望稍后更改它.
Firefox 5'缓存'301重定向
我不得不清除我的缓存来改变它.为了避免将来发生这种令人头疼的问题,我能够像以下那样暂时做到:
from django.views.generic import RedirectView url(r'^source$', RedirectView.as_view(permanent=False, url='/dest/')),