質問

単純なリダイレクトを実行するにはどうすればよいですか (例: 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/')),
)

サブフォルダー全体をリダイレクトする場合は、 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のパラメータは、ラムダ関数に渡されます。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top