当前位置:  开发笔记 > 编程语言 > 正文

Python + Django页面重定向

如何解决《Python+Django页面重定向》经验,为你挑选了7个好方法。

如何在Django中完成简单的重定向(例如cflocation在ColdFusion或header(location:http://)PHP中)?



1> Baishampayan..:

这很简单:

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 1.0的最佳方法.看到这个答案:http://stackoverflow.com/questions/523356/python-django-page-redirect/3841632#3841632
从Django 1.5开始,这已经被弃用了.请改用"RedirectView":https://docs.djangoproject.com/en/1.5/ref/class-based-views/base/#redirectview
我用`('^ pattern/$',lambda x:redirect('/ redirect/url /'))`
为什么不使用`django.shortcuts`中的`redirect`?

2> Carles Barro..:

根据您的需要(即如果您不想进行任何其他预处理),只需使用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/')),
)



3> Teddy..:

实际上,每个重定向都有一个简单的方法 - 您可以直接urls.py以下位置执行此操作:

from django.http import HttpResponsePermanentRedirect

urlpatterns = patterns(
    '',
    # ...normal patterns here...
    (r'^bad-old-link\.php',
     lambda request: HttpResponsePermanentRedirect('/nice-link')),
)

目标可以是可调用的,也可以是字符串,这就是我在这里使用的.


没错,但是使用django附带的`redirect_to`泛型视图仍然更简单,更易读.请参阅Carles回答http://stackoverflow.com/questions/523356/python-django-page-redirect/3841632#3841632

4> Kennu..:

从Django 1.1开始,您还可以使用更简单的重定向快捷方式:

from django.shortcuts import redirect

def myview(request):
    return redirect('/path')

它还需要一个可选的permanent = True关键字参数.



5> odinho - Vel..:

如果要重定向整个子文件夹,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)如果要复制查询字符串,也可以执行此操作.



6> 小智..:

使用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中



7> Gringo Suave..:

谨防.我在开发服务器上执行此操作,并希望稍后更改它.

Firefox 5'缓存'301重定向

我不得不清除我的缓存来改变它.为了避免将来发生这种令人头疼的问题,我能够像以下那样暂时做到:

from django.views.generic import RedirectView

url(r'^source$', RedirectView.as_view(permanent=False, 
                                      url='/dest/')),

推荐阅读
周扒pi
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有