Here's how I solved this problem for my own applications.  Note that I use
VirtualEnv to ensure that each application gets exactly the Python
environment I want it to have.  If you don't use VirtualEnv, it will make
the WSGI startup script simpler.  Assume that my application is installed
with the following layout:

/data/web/foo/ -- base directory for foo (and the root of a VirtualEnv
environment)
    bin/ -- VirtualEnv scripts, including 'python' symlink
    lib/ -- Python libraries, including Django
    apache/apache.wsgi -- Apache WSGI startup script
    site/foo -- where the Foo site is installed (containing applications
like bar, baz, etc.)
    site/foo/static -- where static content is stored

First, the Apache virtual host configuration:

<VirtualHost *:80>
  ServerName foo.example.com
  ServerAdmin f...@example.com
  ServerSignature email

  LogLevel debug

  WSGIProcessGroup  foo
  WSGIDaemonProcess foo processes=2 threads=5 home=/data/web/foo
display-name=foo

  DocumentRoot /var/www

  WSGIScriptAlias / /data/web/foo/apache/django.wsgi
  <Directory /data/web/foo/apache>
    Order allow,deny
    Allow from all
  </Directory>

  Alias /static/ /data/web/foo/site/foo/static/
  <Directory /data/web/foo/site/foo/static/>
    SetHandler None
    Order allow,deny
    Allow from all
  </Directory>
</VirtualHost>

And now the WSGI startup script (most of this is just to make VirtualEnv
work):

import os, sys, site

here = os.path.abspath( os.curdir )

ALLDIRS = [
    os.path.join( here, 'site' ),
    os.path.join( here, 'lib', 'python2.6', 'site-packages' ),
]

# Remember original sys.path.
prev_sys_path = list(sys.path)

# Add each new site-packages directory.
for directory in ALLDIRS:
  site.addsitedir(directory)

# Reorder sys.path so new directories at the front.
new_sys_path = []
for item in list(sys.path):
    if item not in prev_sys_path:
        new_sys_path.append(item)
        sys.path.remove(item)
sys.path[:0] = new_sys_path

os.environ['DJANGO_SETTINGS_MODULE'] = 'foo.settings'

import django.core.handlers.wsgi
application = django.core.handlers.wsgi.WSGIHandler()

In my settings.py file, I have the following:

import os, sys

SITEDIR = os.path.dirname( os.path.dirname( os.path.abspath( __file__ ) ) )

MEDIA_ROOT = os.path.join( SITEDIR, 'foo', 'static' )
MEDIA_URL = '/static/'
ADMIN_MEDIA_PREFIX = '/media/'

ROOT_URLCONF = 'foo.urls'

TEMPLATE_DIRS = (
    os.path.join( SITEDIR, 'foo', 'templates' ),
)

INSTALLED_APPS = (
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.sites',
    'django.contrib.messages',
    'django.contrib.admin',
    'foo.bar',
    'foo.baz',
)

My urls.py file looks like this:

from django.conf import settings
from django.conf.urls.defaults import *
from django.contrib import admin
from django.shortcuts import render_to_response

# Uncomment the next two lines to enable the admin:
admin.autodiscover()

def home( *args, **options ):
    return render_to_response( 'index.html' )

urlpatterns = patterns( '',
    url( r'^$', home, name='site_index' ),
        ( r'^admin/', include( admin.site.urls ) ),
        ( r'^foo include( 'stackexchange.foo.urls' ) ),
        ( r'^bar include( 'stackexchange.bar.urls' ) ),
        ( r'^static/(?P<path>.*)$', 'django.views.static.serve',
            {'document_root': settings.MEDIA_ROOT } ),
 )

You only need the 'static' definition for when you're testing using
'runserver'; Apache intercepts all of the /static/ URLs before Django sees
them in production.

I hope this helps.

- Craig -

On Wed, Dec 15, 2010 at 03:17, NoviceSortOf <dljonsson2...@gmail.com> wrote:

> On Dec 15, 8:08 am, mongoose <darrenma1...@gmail.com> wrote:
> > > I'm trying to run projects on the back of it. For examplehttp://
> baseurl.com/mongoose/
> > > The projects run but the URL don't work properly because they all
> > > reference the base url. So for 'About Me' page it points tohttp://
> baseurl.com/aboutinsteadofhttp://baseurl.com/mongoose/about
> >
> > > Is this something i need to change in django or apache? Is what I'm
> > > trying to do even possible?
>
> I wrestled with something like this - as we needed a static homepage
> based on a django backend for one site.
>
> Per my recollection what I did was.
>
> * Apache httpd.conf required a location match adjustment something
> like.
>
> <LocationMatch "\.(jpg|gif|png|php|html)$">
>      SetHandler None
> </LocationMatch>
>
> * My url.py file needed this line
>      (r'^$', direct_to_template,{'template': 'index.html'}),
>
> * As well I landed up having to put the index.html into both
>  full static form in the .com root as well in the django template
> folder.
>  This was neccesary so people could load into the site as
>  "www.somewhere.com"
>   and while once in the django backend
>  "www.somewhere.com/index.html" would load for further
>   navigating.
>
> I hope that makes sense, there was a downside to this in that
> our web provider Verio's site management front end does not work
> with us resetting the SetHandler in the root. In any case
> most management of this site is done on the command line level.
>
> Not a perfect solution but one that works, I'm open for other
> suggestions.
>
>
> --
> You received this message because you are subscribed to the Google Groups
> "Django users" group.
> To post to this group, send email to django-us...@googlegroups.com.
> To unsubscribe from this group, send email to
> django-users+unsubscr...@googlegroups.com<django-users%2bunsubscr...@googlegroups.com>
> .
> For more options, visit this group at
> http://groups.google.com/group/django-users?hl=en.
>
>

-- 
You received this message because you are subscribed to the Google Groups 
"Django users" group.
To post to this group, send email to django-us...@googlegroups.com.
To unsubscribe from this group, send email to 
django-users+unsubscr...@googlegroups.com.
For more options, visit this group at 
http://groups.google.com/group/django-users?hl=en.

Reply via email to