class SubdomainMiddleware(object): def process_request(self, request): if request.is_ajax(): return None try: site = Site.objects.get_current() except: return None host = request.get_host() if host != site.domain: full_uri = '%s://%s%s' % (request.is_secure() and 'https' or 'http', site.domain, request.get_full_path()) if host.endswith('.' + site.domain): subdomain = host[:host.index('.')].replace('-', '_') if subdomain not in settings.DENIED_SUBDOMAINS: try: callback, callback_args, callback_kwargs = resolve(request.path, settings.SUBDOMAINS_ROOT_URLCONF) except Resolver404, e: return HttpResponseRedirect(full_uri) except Exception, e: if settings.DEBUG: return technical_500_response(request, *exc_info()) return server_error(request) else: callback_kwargs.update({'user': subdomain}) try: return callback(request, *callback_args, **callback_kwargs) except Exception, e: if settings.DEBUG: return technical_500_response(request, *exc_info()) return server_error(request) return HttpResponseRedirect(full_uri)