The preceding section discussed how to deploy a Django project to a basic Apache setup. You may need to configure your Django deployment a bit differently to meet certain needs. The following sections discuss multiple Django installations, media files, and Python eggs.
You can run multiple Django installations on the same Apache instance using <VirtualHost> directives in the Apache httpd.conf file. The following example shows how to use two different <VirtualHost> directives to implement multiple Django installations:
NameVirtualHost * <VirtualHost *> ServerName www.myCoolSite.com # ... SetEnv DJANGO_SETTINGS_MODULE myCoolSite.settings </VirtualHost> <VirtualHost *> ServerName www2. myCoolSite.com # ... SetEnv DJANGO_SETTINGS_MODULE myCoolSite.other_settings </VirtualHost>
By the Way
Some installations of apache will split the configuration entries into multiple files, so virtual host definitions may be in a different configuration file. For example, .../apache/conf/extra/httpd-vhosts.conf.
You can also implement multiple Django installations in a single <VirtualHost> directive as long as you include different <Location> directives with PythonInterpreter directives. The following example shows how to implement multiple Django installations in a single <VirtualHost> directive:
<VirtualHost *> ServerName www. myCoolSite.com # ... <Location "/myCoolSite/"> SetEnv DJANGO_SETTINGS_MODULE myCoolSite.settings PythonInterpreter myCoolSite </Location> <Location "/myOtherCoolSite/"> SetEnv DJANGO_SETTINGS_MODULE myCoolSite.other_settings PythonInterpreter myOtherCoolSite </Location> </VirtualHost>
It is much better to serve media files from a different web server. However, if you absolutely need to serve them from the Django Apache server, turn off mod_python for the media files.
You can turn off mod_python for the media files by specifying a <Location> directive with a None handler. For example, the following directive turns off mod_python for files located in the myMedia subdirectory of the Apache root:
<Location "/myMedia/"> SetHandler = None </Location>
If you installed Django from a Python egg, or if you are using eggs in your project, you need to create an extra Python file in your project that sets up a directory for the Apache web server process to write to. For example:
import os os.environ['PYTHON_EGG_CACHE'] = '/my/python/egg/directory'
You also need to tell mod_python to import this file using the PythonImport directive. Be certain that you specify a PythonInterpreter directive as well. The following shows an example of importing the Python file:
<Location "/myCoolSite/"> SetHandler python-program PythonHandler django.core.handlers.modpython SetEnv DJANGO_SETTINGS_MODULE mysite.settings PythonDebug OnPythonInterpreter my_django PythonImport /path/to/my/project/file.py my_django </Location>