2017-01-30 5 views
1

Я определил несколько сайтов в качестве документации по предлагаемой структуре сайта.Можно ли использовать платформу сайтов Django с несколькими сайтами в одном экземпляре?

Я понимаю, что если бы я запускал многолистные экземпляры моего приложения, у каждого из которых был другой файл настроек (другой SITE_ID), Django всегда знал, какой сайт использовать.

Что я пытался сделать, это запустить единый экземпляр, где доступны несколько сайтов, и правильный сайт следует выбирать в зависимости от текущего URL-адреса сайта.

Сайтов documentation состояние:

Параметр SITE_ID определяет базу данных ID объекта сайта , связанный с конкретными файлом настроек. Если параметр не указан, функция get_current_site() попытается получить текущий сайт, сравнив домен с именем хоста из метода request.get_host() .

Так что я попытался удалить Site_ID из моего settings.py и надеялся, что Django будет проверить домен, чтобы найти текущий сайт, как указано выше, Howewer это терпит неудачу за исключением следующего:

You're using the Django "sites framework" without having set the SITE_ID setting. Create a site in your database and set the SITE_ID setting or pass a request to Site.objects.get_current() to fix this error. 

Итак, похоже, что в документации есть другое: эта настройка не является ommitable

Я понимаю, что использование Framework-сайтов, подобных этому, приведет к проблемам, когда нет объекта запроса, доступного для поиска текущего Сайта, но это не должно быть проблемой в контексте моей заявки.

Возможно ли использовать Site Framework без жесткого кодирования SITE_ID в файле настроек, просто проверив текущий домен приложения?

Я использую Django версии 1.9.9 с Python 3.4.3

ответ

1

«проверить текущий домен» Вы должны иметь запрос - так ясно упоминалось в сообщении об ошибке:

или передать запрос на сайт.objects.get_current()

Else как код будет знать «текущий домен»?

+0

Да, я только понял, когда отправил вопрос, спасибо! – matyas

+0

@matyas это не отвечает на вопрос - было ли это возможно, и если да, то что вам нужно сделать, чтобы заставить его работать? – YPCrumble

+0

@YPCrumble да было возможно. Если у вас нет параметра site_id, определенного в ваших настройках, вам нужно будет иметь requestcontext, чтобы структура сайта могла узнать, что такое текущий сайт. [документация по ссылке get_current_site] (http://example.com) https://docs.djangoproject.com/en/1.11/ref/contrib/sites/#django.contrib.sites.shortcuts.get_current_site.этот запрос должен быть передан функции get_current_site get_current_site (запрос), и это даст вам текущий сайт – matyas

1

Лучшее решение просто добавить Sites framework middleware:

'django.contrib.sites.middleware.CurrentSiteMiddleware' 

Это автоматически передает объект запроса Site.objects.get_current() при каждом запросе.