В моем проекте Django «животные» есть приложение под названием «птицы». У животных/urls.py в URIs «птицы» направляются на птиц/urls.py так:Псевдоним для URI приложения в проекте Django urls.py
urlpatterns=[
url(r'^birds/', include('birds.urls')),
url(r'^b/', include('birds.urls')), # alias
]
«птицы /» является официальным, постоянная база URI; «b /» принимается как ярлык/псевдоним.
Как я могу называть «b /» URI (постоянно) перенаправленными на «птицы /», так что даже если пользователи могут вводить «b/penguin», адресная строка браузера будет (в конечном счете) показывать «птицы/пингвин "? Я предпочитаю не касаться какого-либо кода в приложении «птицы», потому что он не должен знать, как проект сопоставляет URI с приложением.
Я пытался использовать
RedirectView.as_view(pattern_name='birds'))
, но это приводит к 410 Унесенные ответ. И
RedirectView.as_view(url='/birds/'))
redirects/b/penguin to/birds /, убивающий мою птицу.
Это работает для меня (версия Django 1.9.5). Мой браузер регистрирует, что первоначальный запрос '/ b/penguin' получает ответ« 302 Найдено »от Django, сопровождаемый заголовком местоположения'/birds/penguin'. Затем браузер делает второй запрос '/ birds/penguin', который является' 200 OK'. Я добавил атрибут 'constant = True', чтобы вернуть Django' 301 Moved Permanentently' вместо '302 Found'. – Roger