我正在尝试在两个不同的域上运行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
似乎工作正常,当我在重启apache后第一次在浏览器中调用网站时。然后我换到另一个站点并得到NoReverseMatch错误。
有没有人知道可能出现什么问题?
我认为这应该在django-cms开箱即用?
关于科林
答案 0 :(得分:6)
为什么要静态设置SITE_ID
?您应该创建两个设置文件,并根据项目区别使用某种形式的继承,例如:
local_settings.py (不在版本控制下保存敏感数据,如数据库密码和密钥)
SECRET_KEY = 'as!sfhagfsA@$1AJFS78787124!897zR81'
settings.py (保存两个网站相同的设置)
# preferably at the bottom
try:
from local_settings import *
except ImportError:
pass
settings_foo.py (保存特定于网站1的设置)
from settings import *
SITE_ID = 1
settings_bar.py (保存特定于网站2的设置)
from settings import *
SITE_ID = 2
settings_deployment_foo.py (覆盖生产变量)
from settings_foo import *
DEBUG = False
settings_deployment_bar.py (覆盖生产变量)
from settings_bar import *
DEBUG = False
然后在admin/sites
内创建两个网站或使用一个工具(假设您通过这些项目共享数据库,您只需要执行一次)。
答案 1 :(得分:3)
如果您的语言对于xyz.com
和abc.com
因此,您可以在中间件中处理它,因此中间件可以在运行时将可用语言分配给子域。
from django.conf import settings
from django.contrib.sites.models import Site
class SiteMiddleware(object):
def process_request(self, request):
try:
current_site = Site.objects.get(domain=request.get_host())
except Site.DoesNotExist:
current_site = Site.objects.get(id=settings.DEFAULT_SITE_ID)
request.current_site = current_site
settings.SITE_ID = current_site.id
settings.SITE_NAME = current_site.name
if settings.SITE_ID is not 1:
settings.CMS_LANGUAGES[settings.SITE_ID] = settings.CMS_LANGUAGES[1]
答案 2 :(得分:1)
经过几个小时的反复试验,我得到了以下解决方案。
我们需要保持SITE
和CMS_LANGUAGES
例如,我有两个网站abc.com
,网站ID为1,xyz.com
网站ID为
因此您需要在
中提及以下关系settings.py
CMS_LANGUAGES = {
## Customize this
'default': {
'public': True,
'hide_untranslated': False,
'redirect_on_fallback': True,
},
1: [
{
'public': True,
'code': 'en',
'hide_untranslated': False,
'name': gettext('en'),
'redirect_on_fallback': True,
},
{
'public': True,
'code': 'zh',
'hide_untranslated': False,
'name': gettext('zh'),
'redirect_on_fallback': True,
},
{
'public': True,
'code': 'my',
'hide_untranslated': False,
'name': gettext('my'),
'redirect_on_fallback': True,
},
],
2: [
{
'public': True,
'code': 'en',
'hide_untranslated': False,
'name': gettext('en'),
'redirect_on_fallback': True,
},
{
'public': True,
'code': 'zh',
'hide_untranslated': False,
'name': gettext('zh'),
'redirect_on_fallback': True,
},
{
'public': True,
'code': 'my',
'hide_untranslated': False,
'name': gettext('my'),
'redirect_on_fallback': True,
},
],
}
此外,我正在使用site
中间件,它使用域名检测网站ID。
我希望它有助于某人:)