Python 如何在子url部署Django应用程序?

Python 如何在子url部署Django应用程序?,python,django,apache,Python,Django,Apache,我需要建立一个django开发环境,可以在互联网上公开查看(我是为学校做的,我的项目需要我的教授查看,这不是一个需要太多安全性的设置)。我有一个运行Ubuntu 8.04 LTS的虚拟服务器 我需要在我的主站点的子目录中运行多个django应用程序。也就是说,我需要mysite.com是一个静态页面,mysite.com/wordpress是我的wordpress博客,mysite.com/django1 mysite.com/django2等是django项目 我正在使用apache,我将使用

我需要建立一个django开发环境,可以在互联网上公开查看(我是为学校做的,我的项目需要我的教授查看,这不是一个需要太多安全性的设置)。我有一个运行Ubuntu 8.04 LTS的虚拟服务器

我需要在我的主站点的子目录中运行多个django应用程序。也就是说,我需要mysite.com是一个静态页面,mysite.com/wordpress是我的wordpress博客,mysite.com/django1 mysite.com/django2等是django项目

我正在使用apache,我将使用sqlite或mysql

安装和配置django的方法似乎和提供建议的网站一样多,而且所有这些网站都假设一个项目将成为网站的根。非常感谢您的帮助。

您可以使用

WSGIScriptAlias /django1 /home/keratacon/www/django1/wsgi.py
WSGIScriptAlias /django2 /home/keratacon/www/django2/wsgi.py
在中,假设wsgi.py是wsgi脚本的名称。

解释了解决方案(假设使用mod_wsgi,使用nginx/uwsgi时,解决方案显然与nginx/uwsgi类似,这是不必要的)

WSGIScriptAlias的第一个参数-将从请求url中删除
/sub url
,其余参数将转到django应用程序。如果您的Django应用程序url都以
/sub url
(由mod_wsgi剥离)开头,则您将无法显示这些url处的视图,除非您将
/sub url
重新插入到请求路径部分

import django.core.handlers.wsgi

_application = django.core.handlers.wsgi.WSGIHandler()
def application(environ, start_response):
    #the line below will re-append the sub-url to all urls
    environ['PATH_INFO'] = environ['SCRIPT_NAME'] + environ['PATH_INFO']
    #this one will make django think that it's the only thing running on the server
    environ['SCRIPT_NAME'] = '' # my little addition to make it work
    return _application(environ, start_response)
此外,在您的url.py中,所有url必须以您感兴趣的子url作为前缀

最后,WSGIScriptAlias必须与您的子url相同:

#the below line will "take-out" the sub-url and pass the rest
#to your wsgi script
WSGIScriptAlias /sub-url /path/to/wsgi_script
其中文件
/path/to/wsgi_script
必须包含
应用程序的定义,如第一个代码段所示


要在Django中显式地设置“子url”,必须在Django框架中进行等效的请求路径修补。

Django 1.0以后的版本不需要这些脚本名称和路径信息修补程序。只有较旧的Django版本才需要它们。如果你仍在使用这个,你就做错了。嗯,我试着在Django文档中找到这个,但无法。。。也许是看错了地方。小提琴最初被描述的地方是。Django文档中从未对其进行过描述。它说Django1.0中包含了修复程序,这样就不需要小提琴了。