Джанго 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.



спасибо,

582   4  

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

    Ничего не найдено.