回答:
それは簡単です:
from django.http import HttpResponseRedirect
def myview(request):
...
return HttpResponseRedirect("/path/")
更新:Django 1.0
現在、Djangoでこれを使用するより良い方法があるようですgeneric views
。
例-
from django.views.generic.simple import redirect_to
urlpatterns = patterns('',
(r'^one/$', redirect_to, {'url': '/another/'}),
#etc...
)
ジェネリックビューのドキュメントには他にもあります。クレジット- カルレスBarrobés。
アップデート#2:Django 1.3以降
Django 1.5では、redirect_toは存在せず、RedirectViewに置き換えられました。ヨナタンのクレジット
from django.views.generic import RedirectView
urlpatterns = patterns('',
(r'^one/$', RedirectView.as_view(url='/another/')),
)
redirect
from を使用しないのはなぜdjango.shortcuts
ですか?
('^pattern/$', lambda x: redirect('/redirect/url/'))
必要に応じて(つまり、追加の前処理を実行したくない場合)、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')),
)
ターゲットは文字列と同様に呼び出し可能にすることができます。これは私がここで使用しているものです。
redirect_to
ですが、djangoに付属する一般的なビューを使用する方が、よりシンプルで読みやすくなっています。参照カルレス答えstackoverflow.com/questions/523356/python-django-page-redirect/...
サブフォルダ全体をリダイレクトする場合url
、RedirectViewの引数は実際に補間されるため、次のように実行できますurls.py
。
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')),
]
?P<path>
あなたのキャプチャがに供給されますRedirectView
。このキャプチャされた変数は、url
指定した引数で置き換えられ、/new_path/yay/mypath
元のパスがであったかどうかがわかります/old/yay/mypath
。
….as_view(url='…', query_string=True)
クエリ文字列もコピーする場合にも実行できます。
注意してください。私はこれを開発サーバーで行い、後で変更したいと思いました。
それを変更するには、キャッシュをクリアする必要がありました。将来的にこの頭の引っかき傷を回避するために、私はそれを次のように一時的にすることができました:
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/
これは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'),
....
)
このソリューションでは、ハードコードされたURLではなく、URLパターンの名前を引き続き使用できます。URLのlocation_idパラメータがラムダ関数に渡されます。