他のURLのいずれとも一致しないトラフィックをホームページにリダイレクトするにはどうすればよいですか?
rls.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'),
)
現状では、最後のエントリはすべての「その他」のトラフィックをホームページに送信しますが、HTTP 301または2のいずれかでリダイレクトしたいです。
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_to_home_view>
のurl
として実際にURLを指定する必要があることに注意してください。
permanent=False
はHTTP 302を返し、permanent=True
はHTTP 301を返します。
または、 Django.shortcuts.redirect を使用できます
Django 1.8では、これが私のやり方でした。
from Django.views.generic.base import RedirectView
url(r'^$', views.comingSoon, name='homepage'),
# whatever urls you might have in here
# make sure the 'catch-all' url is placed last
url(r'^.*$', RedirectView.as_view(pattern_name='homepage', permanent=False))
url
を使用する代わりに、pattern_name
を使用できます。これは少しDRYであり、URLを確実に変更します。リダイレクトも変更する必要はありません。
私のようにDjango 1.2に固執していて、RedirectViewが存在しない場合、リダイレクトマッピングを追加する別のルート中心の方法は次のとおりです。
(r'^match_rules/$', 'Django.views.generic.simple.redirect_to', {'url': '/new_url'}),
試合のすべてを再ルーティングすることもできます。これは、アプリのフォルダーを変更するときにブックマークを保持したい場合に便利です。
(r'^match_folder/(?P<path>.*)', 'Django.views.generic.simple.redirect_to', {'url': '/new_folder/%(path)s'}),
URLルーティングを変更しようとしているだけで、.htaccessなどにアクセスできない場合は、Django.shortcuts.redirectよりも望ましいです(私はAppengineを使用しており、app.yamlはそのレベルでURLリダイレクトを許可しません.htaccess)。
別の方法では、次のようにHttpResponsePermanentRedirectを使用します。
View.pyで
def url_redirect(request):
return HttpResponsePermanentRedirect("/new_url/")
Url.pyで
url(r'^old_url/$', "website.views.url_redirect", name="url-redirect"),
他の方法は正常に機能しますが、古き良きDjango.shortcut.redirect
を使用することもできます。
以下のコードは this answe rから取られました
Django 2.xでは、
from Django.contrib import admin
from Django.shortcuts import redirect
from Django.urls import path, include
urlpatterns = [
# this example uses named URL 'hola-home' from app named hola
# for more redirect's usage options: https://docs.djangoproject.com/en/2.1/topics/http/shortcuts/
path('', lambda request: redirect('hola/', permanent=False)),
path('hola/', include("hola.urls")),
path('admin/', admin.site.urls),
]