Hello, everyone.

A little background for a problem first. I'm trying to write a tiny
Django project for our corporate usage (my first one using Django).
Every team has an account on a Linux box where we can host our web
applications with URLs like: http:://server/~project/bin/app and every
application is running with premissions of a corresponding "project"
account.

I've tried to deploy a Django project with FastCGI and faced a problem
with apps using absolute URL in their templates. In particular, login
page to admin interface has an URL:
http:://server/~project/bin/app/admin/ but the form on the page has
action="/admin/". I've explored django.contrib.admin sources a bit and
found that it uses request.path to retreive an absolute URL of the app.

I've also tried to find a solution in the official documentation and this
list archives, but all I found is about an URL of app relative to the
root of the project but not an URL of the project itself.

So, I've made a three-liner hack (wich actually breakes some rules
mentioned in the official documentation). I've created a middleware
class:

class AbsolutePath :
    def process_request( self, request ) :
        request.path = request.META["SCRIPT_NAME"] + request.META["PATH_INFO"]

and inserted it before all others. Fortunately, it even works :), though
I don't completely understand why it do ;). I've expected to be required
to prepend the project prefix to every urlpattern, but they should be
left alone to work properly. It also produces not a very nice URL in my
case, replacing "~" with "%7E" after a login, though it's looking Ok in
the login page source.

At last, the question: is there a less hacky solution to this problem,
or my solution is Ok?

-- 
Dmitry

Attachment: signature.asc
Description: Digital signature

Reply via email to