Ticket #3228: smartslash.diff

File smartslash.diff, 1.0 KB (added by mihai_preda@…, 8 years ago)

SmartSlashMiddleware

  • middleware/smartslash.py

     
     1from django.core import urlresolvers
     2from django import http
     3
     4class SmartSlashMiddleware(object):
     5    """
     6    If the initial response is 404, and the initial path doesn't end with a slash,
     7    a new URL is formed by appending a slash.
     8    If the new URL is found in urlpatterns, then an HTTP-redirect to the new URL is returned.
     9    """
     10
     11    def process_response(self, request, response):
     12        path = request.path
     13        if response.status_code == 404 and path[-1] != '/':
     14            newpath = path + '/'
     15            try:
     16                urlresolvers.resolve(newpath)
     17            except urlresolvers.Resolver404:
     18                pass
     19            else:
     20                newurl = http.build_url(request, newpath)
     21                response = http.HttpResponsePermanentRedirect(newurl)
     22        return response
Back to Top