139

Django では、urls.py から直接単純なリダイレクトを行うにはどうすればよいですか? 当然のことながら、私はよく整理された男で、DRY の原則を支持しているので、URL をハードコーディングするのではなく、名前付きの URL パターンに基づいてターゲットを取得したいと考えています。

4

6 に答える 6

214

Django 1.4 または 1.5 を使用している場合は、次のようにできます。

from django.core.urlresolvers import reverse_lazy
from django.views.generic import RedirectView

urlpatterns = patterns('',
    url(r'^some-page/$', RedirectView.as_view(url=reverse_lazy('my_named_pattern'), permanent=False)),
    ...

Django 1.6 以降を使用している場合は、次のようにすることができます。

from django.views.generic import RedirectView

urlpatterns = patterns('',
    url(r'^some-page/$', RedirectView.as_view(pattern_name='my_named_pattern', permanent=False)),
    ...

Django 1.9 では、 のデフォルト値がpermanentTrue から False に変更されました。permanentこのため、キーワード引数を指定しないと、次の警告が表示されることがあります。

RemovedInDjango19Warning: 「RedirectView.permanent」のデフォルト値は、Django 1.9 で True から False に変更されます。この警告を無効にするには、明示的な値を設定します。

于 2013-03-29T15:41:57.983 に答える
38

これは私にとってはうまくいきます。

from django.views.generic import RedirectView

urlpatterns = patterns('',
    url(r'^some-page/$', RedirectView.as_view(url='/')),
    ...

上記の例'/'では、任意の URL パターンを追加できるインデックス ページにリダイレクトされることを意味します。

于 2015-12-16T11:06:34.250 に答える
9

RedirectView をサポートできない場合、この方法は古いバージョンの django でサポートされています。

view.py で

def url_redirect(request):
    return HttpResponseRedirect("/new_url/")

url.py で

url(r'^old_url/$', "website.views.url_redirect", name="url-redirect"),

を使用して永続的にすることができますHttpResponsePermanentRedirect

于 2015-02-26T12:35:14.650 に答える
9

すべての 404 をホームページにリダイレクトしようとしていたところ、次のようにうまくいきました。

from django.views.generic import RedirectView
...
under urlpatterns, added:
    url(r'^.*/$', RedirectView.as_view(url='/home/')),
    url(r'^$', RedirectView.as_view(url='/home/')),
于 2015-12-17T22:58:41.977 に答える