单个Django项目下的多个站点

Jos*_*eph 5 django

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

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

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

要么

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

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

请指教.

tee*_*ane 8

以下跟我做的一样.我借鉴了 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>
Run Code Online (Sandbox Code Playgroud)

然后,您将要为每个域创建两个不同的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()
Run Code Online (Sandbox Code Playgroud)

然后你会想要创建两个额外的设置文件...所以你会有

settings.py
domain1_settings.py
domain2_settings.py
Run Code Online (Sandbox Code Playgroud)

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
)
Run Code Online (Sandbox Code Playgroud)

最后,您将要创建两个单独的url文件..

domain1_urls.py和domain2_urls.py

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


and*_*wmu 5

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

sites框架可实现这一点-有关文档,请参见此处:

https://docs.djangoproject.com/zh-CN/1.11/ref/contrib/sites/