Py学习  »  Django

单个Django项目下的多个站点

Joseph • 6 年前 • 1714 次点击  

在一个Django项目下拥有多个站点是否可行和正确?这样就可以为所有站点提供全局共享的情景文件、URL文件以及全局共享的“应用程序”,并为单个Django项目下的所有站点提供通用的管理界面。每个站点可能有自己的设置、URL和模板,这些设置、URL和模板将被覆盖或动态导入父设置文件。

有人能告诉我如何使用python2.6+django 1.2.1+apache2.2+mod_wsgi来实现这一点吗?因为我对使用mod_wsgi时需要提供的虚拟主机有点困惑。

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

我必须制作一个全局共享模块来将全局设置和URL详细信息导入到特定于站点的设置和URL,而不是全局Django项目。

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

请教。

Python社区是高质量的Python/Django开发社区
本文地址:http://www.python88.com/topic/31009
文章 [ 2 ]  |  最新文章 6 年前
teewuane
Reply   •   1 楼
teewuane    13 年前

这跟我做的一样。我借来的 http://michal.karzynski.pl/blog/2010/10/19/run-multiple-websites-one-django-project/

基本上,您将在每个域的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>

然后,您需要为每个域创建两个不同的wsgi文件,并将它们放在保存项目的目录中。wsgiscriptaalias是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

域1_settings.py和域2_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
)

最后,您需要创建两个独立的URL文件。

域1_urls.py和域2_urls.py

domain1_urls.py将是站点_id 1的默认值,domain2_urls.py将是站点_id 2的默认值。

andrewmu
Reply   •   2 楼
andrewmu    8 年前

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

这个 sites 框架支持此功能-有关文档,请参见以下内容:

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