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开箱即用?
科林
你为什么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或使用一个夹具(假设您通过这些项目共享数据库,您只需要执行一次).