Зачем мне нужен набор DJANGO_SETTINGS_MODULE?
Каждый раз, когда я вхожу на сервер через SSH, мне нужно ввести следующее:
export DJANGO_SETTINGS_MODULE=settings
если я не использую использование модуля manage.py,
My manage.py имеет следующий добавленный код:
if "notification" in settings.INSTALLED_APPS:
from notification import models as notification
def create_notice_types(app, created_models, verbosity, **kwargs):
notification.create_notice_type("friends_invite", _("Invitation Received"), _("you have received an invitation"))
notification.create_notice_type("friends_accept", _("Acceptance Received"), _("an invitation you sent has been accepted"))
signals.post_syncdb.connect(create_notice_types, sender=notification)
else:
print "Skipping creation of NoticeTypes as notification app not found"
Любые идеи?
Ответы
Ответ 1
Ваш manage.py
ссылается на приложение (notifications
). Это заставляет Django жаловаться на установку DJANGO_SETTINGS_MODULE, поскольку среда Django еще не настроена.
Кстати, вы можете принудительно настроить среду, но, честно говоря, я бы не сделал этого в manage.py. По-моему, это не очень хорошая практика.
Вот как вы можете вручную настроить среду Django из любого приложения (или программы, если на то пошло):
# set up the environment using the settings module
from django.core.management import setup_environ
from myapp import settings
setup_environ(settings)
Ответ 2
Вам нужно установить переменную среды DJANGO_SETTINGS_MODULE, потому что она знает, как Django знает, что называется вашим модулем настроек (так что вы можете иметь разные для каждого проекта или для тестирования и разработки). Вы можете установить его в самих скриптах, прежде чем импортировать django (прямо или косвенно), но это не принесет больших пользы при запуске сценариев, предоставляемых Django.
Самое простое решение, вероятно, просто установить DJANGO_SETTINGS_MODULE в сценарии запуска оболочки, поэтому вам больше не придется устанавливать его вручную. Обычными файлами для их добавления являются:.bash_profile и .bashrc(если вы действительно используете bash.)
Ответ 3
По умолчанию, manage.py ищет модуль настроек в том же каталоге, что и сам. Если он не находит его, он запустит сообщение, чтобы вместо него использовать django-admin.py. Он фактически не настраивает среду, пока не запустится execute_manager
. Если вам нужно запустить свои крючки, прежде чем вызывать свои функции управления, практика, которую я видел, заключается в том, чтобы поместить их в соответствующее приложение models.py
.