[mod_python] setting content_type intelligently

Daniel J. Popowich dpopowich at mtrsd.k12.ma.us
Thu Feb 5 10:32:23 EST 2004


Gregory (Grisha) Trubetskoy writes:
> 
> 
> On Tue, 13 Jan 2004, Daniel J. Popowich wrote:
> 
> > In most of my mod_python apps if a request comes in for a file that I
> > don't want to handle, let's say an image file, foo.gif, I raise
> > apache.SERVER_RETURN with a value of apache.DECLINED.  Apache then
> > handles the request and sends in the header:
> >
> >   Content-Type: image/gif
> >
> > However, I now have an app that wants to live in a <Location ...>
> > directive so returning apache.DECLINED doesn't work: apache has no
> > other means of handling the request so it returns a 404 error.
> 
> I am not sure I understand why that is... - what's the difference between
> a request in <Location ...> and any other request?
> 

<Location ...> directives live in url space, completely outside from
the filesystem.  I have my app configured like this:


    <Location /site>
    SetHandler python-program
    PythonHandler ...
    ...
    </Location>

When requests come in, such as http://myserver/site/foo/bar, my
handler will use 'foo/bar' to determine what it sends back to the
client and, generally, use the pathinfo as a relative path from a data
directory configured, purposefully, outside of DocumentRoot.  So, how
do I set content-type correctly for content I don't generate, ie,
images?

If my app was <Directory> based, I could raise apache.SERVER_RETURN
with apache.DECLINED; apache would have means to find the file and "do
the right thing," but inside <Location> there is NO filesystem, thus
my 404 error.

> > My only means of recourse seems to be something like this:
> >
> >     if NOT_HANDLING_PAGE:
> >         req.write(open(filename).read())
> 
> As a sidenote, if you're using 3.1.2b, you should check out
> req.sendfile().

Yes, I'm using 3.1.2b.  I'll check it out, it may be just what I'm
looking for.

Thanks,

Daniel



More information about the Mod_python mailing list