29 lines
1 KiB
Python
29 lines
1 KiB
Python
from django.http import Http404, HttpResponseRedirect
|
|
from django.urls import resolve
|
|
|
|
|
|
class BlogRedirectMiddleware:
|
|
def __init__(self, get_response):
|
|
self.get_response = get_response
|
|
|
|
def __call__(self, request):
|
|
# Code to be executed for each request before
|
|
# the view (and later middleware) are called.
|
|
|
|
response = self.get_response(request)
|
|
|
|
# Check if the response is 404 and not a request for /blog/
|
|
if (response.status_code == 404 and
|
|
not (request.path.startswith('/blog/') or request.path.startswith('/media/'))):
|
|
new_path = f'/blog{request.path}'
|
|
new_path = new_path.replace('/posts/', '/')
|
|
try:
|
|
# Check if the new URL with /blog/ exists
|
|
resolve(new_path)
|
|
# Redirect to the new URL if it exists
|
|
return HttpResponseRedirect(new_path)
|
|
except Http404:
|
|
# If the new URL doesn't exist, return the original 404 response
|
|
pass
|
|
|
|
return response
|