Зачем мне нужен набор 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.