1. ホーム
  2. python

[解決済み] Django URL リダイレクト

2022-09-08 08:06:43

質問

他の URL にマッチしないトラフィックをトップページにリダイレクトするにはどうしたらよいでしょうか。

urls.pyを使用します。

urlpatterns = patterns('',
    url(r'^$', 'macmonster.views.home'),
    #url(r'^macmon_home$', 'macmonster.views.home'),
    url(r'^macmon_output/$', 'macmonster.views.output'),
    url(r'^macmon_about/$', 'macmonster.views.about'),
    url(r'^.*$',  'macmonster.views.home'),
)

このままでは、最後のエントリはすべての "other" トラフィックをトップページに送ってしまいますが、私は HTTP 301 または 302 .

どのように解決するのですか?

というクラスベースのビューを試すことができます。 RedirectView

from django.views.generic.base import RedirectView

urlpatterns = patterns('',
    url(r'^$', 'macmonster.views.home'),
    #url(r'^macmon_home$', 'macmonster.views.home'),
    url(r'^macmon_output/$', 'macmonster.views.output'),
    url(r'^macmon_about/$', 'macmonster.views.about'),
    url(r'^.*$', RedirectView.as_view(url='<url_to_home_view>', permanent=False), name='index')
)

として、どのように url の中に <url_to_home_view> では実際にurlを指定する必要があります。

permanent=False は HTTP 302 を返しますが permanent=True は HTTP 301 を返します。

別の方法として django.shortcuts.redirect

Django 2+ バージョンのための更新

Django 2+で。 url() は非推奨で、代わりに re_path() . 使い方は url() と同じです。正規表現を必要としない置換には path() .

from django.urls import re_path

re_path(r'^.*$', RedirectView.as_view(url='<url_to_home_view>', permanent=False), name='index')