160

cflocationDjangoで (ColdFusion やheader(location:http://)PHP などで)単純なリダイレクトを行うにはどうすればよいですか?

4

10 に答える 10

253

それは簡単です:

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...
)

一般的なビューのドキュメントには、さらに多くの情報があります。クレジット -カルレス・バロベス

更新 #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/')),
)
于 2009-02-07T07:14:37.563 に答える
114

必要に応じて (つまり、追加の前処理を行いたくない場合)、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/')),
)
于 2010-10-01T17:31:30.680 に答える
38

実際には、リダイレクトごとにビューを表示するよりも簡単な方法があります。これは、次の場所で直接行うことができますurls.py

from django.http import HttpResponsePermanentRedirect

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

ターゲットは、ここで使用している文字列だけでなく、呼び出し可能にすることもできます。

于 2010-01-17T08:07:32.017 に答える
28

Django 1.1 以降、よりシンプルなリダイレクトショートカットを使用することもできます。

from django.shortcuts import redirect

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

また、オプションの permanent=True キーワード引数も必要です。

于 2010-09-05T11:09:03.537 に答える
10

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にあります

于 2011-09-14T12:55:33.050 に答える
6

注意してください。私はこれを開発サーバーで行い、後で変更したいと考えました。

キャッシュを変更するには、キャッシュをクリアする必要がありました。将来この頭を悩ませるのを避けるために、次のように一時的にすることができました:

from django.views.generic import RedirectView

url(r'^source$', RedirectView.as_view(permanent=False, 
                                      url='/dest/')),
于 2012-11-06T01:18:20.157 に答える
1

これは、管理セクションで行うことができます。ドキュメントで説明されています。

https://docs.djangoproject.com/en/dev/ref/contrib/redirects/

于 2012-02-20T21:19:33.327 に答える