I can't quite see how it wouldn't get the request.
To help with your understanding, the path it follows is like this:
Django:SentryHandler->_emit()
SentryHandler->emit(**kwargs) # includes request at this point
Django:Client->capture(**kwargs)
So it should be getting the request object in the django client's capture method, which is where it extracts the HTTP information.
I'm going to slightly clean this up so the client itself always tries to use the thread local in the middleware (instead of the logging handler),
though I still don't know how you'd be missing the data (unless there's an error parsing it).