Python + Django ページのリダイレクト
質問
単純なリダイレクトを実行するにはどうすればよいですか (例: cflocation
ColdFusion の場合、または header(location:http://)
PHP 用) を Django で?
解決
それは簡単です:
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...
)
さらに多くのものがあります 一般的なビューのドキュメント。クレジット - カルレス・バロベス.
アップデート #2:ジャンゴ 1.3+
ジャンゴ 1.5 では リダイレクト先 もう存在せず、次のものに置き換えられました リダイレクトビュー. 。クレジット: ヨナタン
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...
)
<時間>
ジャンゴ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')
また、オプションの永久= Trueのキーワード引数を取ります。
サブフォルダー全体をリダイレクトする場合は、 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)
クエリ文字列もコピーしたい場合。
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 /リダイレクト/ の
page_path = urls.pyで定義
def deletePolls(request):
pollId = deletePool(request.GET['id'])
return HttpResponseRedirect("/page_path/")
このはジャンゴのほとんどのバージョンで動作するはずです、私は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のパラメータは、ラムダ関数に渡されます。