2

2 つの異なるドメインで django-cms を実行しようとしています。そのために、2 つのドメイン (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を再起動した後、ブラウザで初めてWebサイトを呼び出すと、正しく動作するようです。次に、他のサイトに変更し、NoReverseMatch エラーが発生しました。

誰が何が間違っているのか考えていますか?

これは django-cms ですぐに使えるはずだと思いましたか?

よろしくコリン

4

3 に答える 3

6

なぜSITE_ID静的に設定するのですか?おそらく 2 つの設定ファイルを作成し、プロジェクトの違いに応じて何らかの形式の継承を使用する必要があります。たとえば、次のようになります。

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

次に、2 つのサイトを作成するadmin/sitesか、フィクスチャを使用します (これらのプロジェクト間でデータベースを共有していると仮定すると、これを行う必要があるのは 1 回だけです)。

于 2013-08-20T07:49:20.240 に答える
1

数時間の試行錯誤の後、次の解決策を得ました。

と の間の関係を維持する必要がSITEあります。CMS_LANGUAGES

たとえば、abc.comサイト ID 1 とxyz.comサイト ID 2の 2 つのサイトがあるとします。

したがって、次の関係について言及する必要があります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 を検出するミドルウェアも使用しています。

私はそれが誰かを助けることを願っています:)

于 2015-03-03T13:29:32.940 に答える