|
Revision 5572, 1.1 kB
(checked in by adrian, 1 year ago)
|
newforms-admin: Merged to [5571]
|
- Property svn:eol-style set to
native
|
| Line | |
|---|
| 1 |
from django.contrib.redirects.models import Redirect |
|---|
| 2 |
from django import http |
|---|
| 3 |
from django.conf import settings |
|---|
| 4 |
|
|---|
| 5 |
class RedirectFallbackMiddleware(object): |
|---|
| 6 |
def process_response(self, request, response): |
|---|
| 7 |
if response.status_code != 404: |
|---|
| 8 |
return response # No need to check for a redirect for non-404 responses. |
|---|
| 9 |
path = request.get_full_path() |
|---|
| 10 |
try: |
|---|
| 11 |
r = Redirect.objects.get(site__id__exact=settings.SITE_ID, old_path=path) |
|---|
| 12 |
except Redirect.DoesNotExist: |
|---|
| 13 |
r = None |
|---|
| 14 |
if r is None and settings.APPEND_SLASH: |
|---|
| 15 |
# Try removing the trailing slash. |
|---|
| 16 |
try: |
|---|
| 17 |
r = Redirect.objects.get(site__id__exact=settings.SITE_ID, |
|---|
| 18 |
old_path=path[:path.rfind('/')]+path[path.rfind('/')+1:]) |
|---|
| 19 |
except Redirect.DoesNotExist: |
|---|
| 20 |
pass |
|---|
| 21 |
if r is not None: |
|---|
| 22 |
if r.new_path == '': |
|---|
| 23 |
return http.HttpResponseGone() |
|---|
| 24 |
return http.HttpResponsePermanentRedirect(r.new_path) |
|---|
| 25 |
|
|---|
| 26 |
# No redirect was found. Return the response. |
|---|
| 27 |
return response |
|---|