Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- # settings.py
- INSTALLED_APPS = [
- ...
- 'django.contrib.redirects',
- ]
- MIDDLEWARE = [
- ...
- 'shared.middleware.redirect.RedirectFallbackMiddleware',
- ...
- ]
- # shared.middleware.redirect.py
- from django.conf import settings
- from django.contrib.redirects.models import Redirect
- from django.contrib.sites.shortcuts import get_current_site
- from django.http import HttpResponseGone, HttpResponsePermanentRedirect
- from django.utils.deprecation import MiddlewareMixin
- __all__ = ('RedirectFallbackMiddleware', )
- class RedirectFallbackMiddleware(MiddlewareMixin):
- response_gone_class = HttpResponseGone
- response_redirect_class = HttpResponsePermanentRedirect
- def process_response(self, request, response):
- full_path = request.get_full_path()
- current_site = get_current_site(request)
- redirect = None
- try:
- redirect = (
- Redirect
- .objects
- .get(site=current_site, old_path=full_path)
- )
- except Redirect.DoesNotExist:
- pass
- if (
- redirect is None
- and settings.APPEND_SLASH
- and not request.path.endswith('/')
- ):
- try:
- redirect = (
- Redirect
- .objects
- .get(
- site=current_site,
- old_path=request.get_full_path(force_append_slash=True),
- )
- )
- except Redirect.DoesNotExist:
- pass
- if redirect is not None:
- if redirect.new_path == '':
- return self.response_gone_class()
- return self.response_redirect_class(redirect.new_path)
- # No redirect was found. Return the response.
- return response
Add Comment
Please, Sign In to add comment