Django

Code

Ticket #3228: smartslash.diff

File smartslash.diff, 1.0 kB (added by mihai_preda@yahoo.com, 2 years ago)

SmartSlashMiddleware?

  • middleware/smartslash.py

    old new  
     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