cflocation
Djangoで (ColdFusion やheader(location:http://)
PHP などで)単純なリダイレクトを行うにはどうすればよいですか?
10 に答える
それは簡単です:
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/')),
)
必要に応じて (つまり、追加の前処理を行いたくない場合)、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 キーワード引数も必要です。
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にあります
注意してください。私はこれを開発サーバーで行い、後で変更したいと考えました。
キャッシュを変更するには、キャッシュをクリアする必要がありました。将来この頭を悩ませるのを避けるために、次のように一時的にすることができました:
from django.views.generic import RedirectView
url(r'^source$', RedirectView.as_view(permanent=False,
url='/dest/')),
これは、管理セクションで行うことができます。ドキュメントで説明されています。
https://docs.djangoproject.com/en/dev/ref/contrib/redirects/