El libro de Django 1.0

16.3. Integración con aplicaciones web existentes

Es posible ejecutar una aplicación Django en el mismo servidor de una aplicación impulsada por otra tecnología. La manera más directa de hacer esto es usar el archivo de configuración de Apache, httpd.conf, para delegar patrones de URL diferentes a distintas tecnologías (Nota que el Capítulo 20 cubre el despliegue con Django en Apache/mod_python, por lo tanto tal vez valga la pena leer ese capítulo primero antes de intentar esta integración).

La clave está en que Django será activado para un patrón particular de URL sólo si tu archivo httpd.conf lo dice. El despliegue por omisión explicado en el Capítulo 20, asume que quieres que Django impulse todas las páginas en un dominio particular:

<Location "/">
    SetHandler python-program
    PythonHandler django.core.handlers.modpython
    SetEnv DJANGO_SETTINGS_MODULE mysite.settings
    PythonDebug On
</Location>

Aquí, la línea <Location "/"> significa "maneja cada URL, comenzando en la raíz", con Django.

Esta perfectamente bien limitar esta directiva <Location> a cierto árbol de directorio. Por ejemplo, digamos que tienes una aplicación PHP existente que impulsa la mayoría de las páginas en un dominio y quieres instalar el sitio de administración de Django en /admin/ sin afectar el código PHP. Para hacer esto, sólo configura la directiva <Location> a /admin/:

<Location "/admin/">
    SetHandler python-program
    PythonHandler django.core.handlers.modpython
    SetEnv DJANGO_SETTINGS_MODULE mysite.settings
    PythonDebug On
</Location>

Con esto en su lugar, sólo las URLs que comiencen con /admin/ activarán Django. Cualquier otra página usará cualquier infraestructura que ya exista.

Nota que adjuntar Django a una URL calificada (como /admin/ en el ejemplo de esta sección) no afecta a Django en el análisis de las URLs. Django trabaja con la URL absoluta (ej., /admin/people/person/add/), no con una versión "recortada" de la URL (ej., /people/person/add/). Esto significa que tu URLconf raíz debe incluir el prefijo /admin/.