Django-CMS:同一项目中的多个域

cwi*_*irz 2 python django django-cms python-2.7

我正试图在两个不同的域上运行django-cms.为此,我创建了两个域(django.contrib.sites)并添加了django-cms页面.现在我创建了一个SiteDetectionMiddleware:

class SiteDetectionMiddleware:
  def process_request(self, request):
    settings.SITE_ID = 1
    host = request.META.get('HTTP_HOST')
    if host:
      try:
        site = Site.objects.get(domain=host)
        settings.SITE_ID = site.id
      except Site.DoesNotExist:
        pass
Run Code Online (Sandbox Code Playgroud)

它似乎工作正常,当我重新启动apache后第一次在浏览器中调用网站时.然后我改为其他网站并得到NoReverseMatch错误.

有谁知道什么可能是错的?

我认为这应该在django-cms开箱即用?

科林

Hed*_*ide 6

你为什么SITE_ID静态设置?您应该创建两个设置文件,并根据项目区别使用某种形式的继承,例如:

local_settings.py(不在版本控制下保存敏感数据,如数据库密码和密钥)

SECRET_KEY = 'as!sfhagfsA@$1AJFS78787124!897zR81'
Run Code Online (Sandbox Code Playgroud)

settings.py(保存两个站点相同的设置)

# preferably at the bottom
try:
    from local_settings import *
except ImportError:
    pass
Run Code Online (Sandbox Code Playgroud)

settings_foo.py(保存特定于站点1的设置)

from settings import *

SITE_ID = 1
Run Code Online (Sandbox Code Playgroud)

settings_bar.py(保存特定于站点2的设置)

from settings import *

SITE_ID = 2
Run Code Online (Sandbox Code Playgroud)

settings_deployment_foo.py(覆盖生产的变量)

from settings_foo import *

DEBUG = False
Run Code Online (Sandbox Code Playgroud)

settings_deployment_bar.py(覆盖生产的变量)

from settings_bar import *

DEBUG = False
Run Code Online (Sandbox Code Playgroud)

然后只需在其中创建两个站点admin/sites或使用一个夹具(假设您通过这些项目共享数据库,您只需要执行一次).