2010-07-30 46 views
4

在单个Django项目下是否有多个站点是可能和正确的。因此,将会有全球共享的会议文件,urls文件以及全球共享的所有网站的“应用程序”以及单个django项目下所有网站的常用管理界面。每个网站可能有自己的设置,网址和模板,这些设置将被覆盖或动态导入到父设置文件中。在单个Django项目下的多个站点

任何人都可以请告诉我如何使用Python2.6 + Django 1.2.1 + Apache2.2 + mod_wsgi来实现此目的。因为我对使用mod_wsgi时需要提供的虚拟主机有点困惑。

根据上述要求,我计划将wsgi文件保存在主django项目目录中,以便主设置将被导入,并且在主设置中我计划动态地导入请求的站点设置。是否可能这种方式使用Apache + mod_wsgi。请指教。

OR

而不是全球性的Django项目做我必须做一个全局共享的模块导入全局设置和URL信息到现场的具体设置和网址。

我想更好地重用代码,而不是在每个站点中进行冗余更改。

请指教。

回答

3

是的,这是完全可能的。这些网站甚至可以共享数据。

sites框架使得此方法 - 文档,在这里看到:

https://docs.djangoproject.com/en/1.11/ref/contrib/sites/

+0

嗨安德鲁, 谢谢,但你能解释一下如何使用mod_wsgi为每个站点创建apache虚拟主机,以及如何使用mod_wsgi动态地处理和传递请求到其各自的站点。每个网站都不会有自己的设置和网址吗?请咨询 – Joseph 2010-07-30 09:39:44

+0

我还没有做到这一点,但我希望你可以为每个站点定义一个虚拟主机,配置为全部使用同一个django项目。然后在应用程序中,我想你会使用'Site.objects.get_current()'来选择例如各个站点的模板目录等。 – andrewmu 2010-07-30 10:49:45

+0

您能否介绍一下我们如何配置所有站点的虚拟站点以配置为使用相同的django项目。我在这一部分非常困惑。请咨询 – Joseph 2010-07-30 12:48:50

6

这下面是我做了同样的方式。我借用http://michal.karzynski.pl/blog/2010/10/19/run-multiple-websites-one-django-project/

基本上,你会在你的http.conf文件中为每个域创建一个虚拟主机条目。

# Virtual hosts setup 
NameVirtualHost * 
<VirtualHost *> 
    ServerName example1.com 

    WSGIDaemonProcess APPLICATION_NAME processes=5 python-path=/home/USERNAME/webapps/APPLICATION_NAME:/home/USERNAME/webapps/APPLICATION_NAME/lib/python2.6 threads=1 
    WSGIScriptAlias//home/USERNAME/webapps/APPLICATION_NAME/domain1.wsgi 
</VirtualHost> 

<VirtualHost *> 
    ServerName example2.com 


    WSGIDaemonProcess APPLICATION_NAME_www processes=5 python-path=/home/USERNAME/webapps/APPLICATION_NAME:/home/USERNAME/webapps/APPLICATION_NAME/lib/python2.6 threads=1 
    WSGIScriptAlias//home/USERNAME/webapps/APPLICATION_NAME/domain2.wsgi 
</VirtualHost> 

然后,您需要为每个域创建两个不同的wsgi文件,并将它们放在保存项目的目录中。该WSGIScriptAlias是路径WSGI文件,以便确保它们是一样的...

例WSGI文件:

import os 
import sys 
from django.core.handlers.wsgi import WSGIHandler 

os.environ['DJANGO_SETTINGS_MODULE'] = 'PROJECT_NAME.domain1_settings' # or PROJECT_NAME.domain2_settings 
application = WSGIHandler() 

然后,你需要创建两个额外的设置文件...所以你“马上有

settings.py 
domain1_settings.py 
domain2_settings.py 

domain1_settings.py和domain2_settings.py将导入settings.py:domain1_settings.py的

例如:

from settings import * 

SITE_ID = 1 

ROOT_URLCONF = 'domain1_urls' 

INSTALLED_APPS = (
    'django.contrib.auth', 
    'django.contrib.contenttypes', 
    'django.contrib.sessions', 
    'django.contrib.sites', 
    'django.contrib.messages', 

# other apps specific to this domain 
) 

最后,你要创建两个单独的网址文件..

domain1_urls.py和domain2_urls.py

domain1_urls.py将是SITE_ID 1,和domain2_urls默认。 py将是site_id 2的默认值。