Джанго URL-адрес перенаправления
Как я могу перенаправить трафик, который не соответствует ни одному из моих других 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'),
)
как это стоит последняя запись отправляет весь" другой " трафик на домашнюю страницу, но я хочу перенаправить через HTTP 301 или 302.
спасибо,
4 ответов:
вы можете попробовать класс на основе представления под названием 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 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, который немного не сухой, и будет гарантировать, что вы измените свой 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 и т. д. (Я нахожусь на Appengine и приложение.yaml не позволяет перенаправление url на этом уровне, как an .htaccess).
другой способ сделать это с помощью HttpResponsePermanentRedirect вот так:
In view.py
def url_redirect(request): return HttpResponsePermanentRedirect("/new_url/")в url.py
url(r'^old_url/$', "website.views.url_redirect", name="url-redirect"),
Comments