单个Django项目下的多个站点

单个Django项目下的多个站点,django,Django,在一个django项目下拥有多个站点是否可能且正确。因此,在单个django项目下,所有站点都将有全局共享的sittings文件、URL文件以及全局共享的“应用程序”,以及所有站点的公共管理界面。每个站点可能都有自己的设置、URL和模板,这些设置、URL和模板将被覆盖或动态导入父设置文件 谁能告诉我如何使用Python2.6+Django 1.2.1+Apache2.2+mod_wsgi实现这一点。因为我对使用mod_wsgi时需要提供的virtualhost有点困惑 根据上述要求,我计划将ws

在一个django项目下拥有多个站点是否可能且正确。因此,在单个django项目下,所有站点都将有全局共享的sittings文件、URL文件以及全局共享的“应用程序”,以及所有站点的公共管理界面。每个站点可能都有自己的设置、URL和模板,这些设置、URL和模板将被覆盖或动态导入父设置文件

谁能告诉我如何使用Python2.6+Django 1.2.1+Apache2.2+mod_wsgi实现这一点。因为我对使用mod_wsgi时需要提供的virtualhost有点困惑

根据上述要求,我计划将wsgi文件保存在django主项目目录中,以便导入主设置,并在主设置中动态导入请求的站点设置。是否可以使用Apache+mod_wsgi这样做。请给我一些建议

我必须创建一个全局共享模块,将全局设置和url详细信息导入站点特定的设置和url,而不是全局django项目

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


请给出建议。

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

站点
框架支持此功能-有关文档,请参阅此处:


以下内容与我的做法相同。我向你借的

基本上,您将在http.conf文件中为每个域创建一个virtualhost条目

# 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>
然后您需要创建两个额外的设置文件。。。所以你会有

settings.py
domain1_settings.py
domain2_settings.py
domain1_settings.py和domain2_settings.py将导入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_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
)
最后,您需要创建两个单独的URL文件

域1_url.py和域2_url.py


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

您好,安德鲁,谢谢,但您能否解释一下如何使用mod_wsgi为每个站点创建apache虚拟主机,以及如何使用mod_wsgi动态处理请求并将其传递到各自的站点。不是每个站点都有自己的设置和URL吗?请注意,我还没有这样做,但我希望您为每个站点定义一个虚拟主机,配置为使用相同的django项目。然后,在应用程序中,我设想您将使用
Site.objects.get_current()
为各个站点选择模板目录等。请您解释一下,我们如何为所有站点配置虚拟站点,以使用相同的django项目。在那一部分我真的很困惑。请注意,如果您可以在apache中设置两个或多个虚拟主机(这方面有很好的文档),并为它们提供相同的WSGI设置,那么这样做有效吗?