Зачем мне нужен набор DJANGO_SETTINGS_MODULE? - PullRequest
13 голосов
/ 20 января 2010

Каждый раз, когда я вхожу на свой сервер через SSH, мне нужно вводить следующее:

export DJANGO_SETTINGS_MODULE=settings

если я не использую модуль manage.py, произойдет сбой

Мой 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"

Есть идеи?

Ответы [ 3 ]

11 голосов
/ 20 января 2010

Ваш 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)
6 голосов
/ 20 января 2010

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

Возможно, самое простое решение - просто установить DJANGO_SETTINGS_MODULE в скриптах запуска вашей оболочки, так что вам больше не придется устанавливать его вручную. Обычные файлы для добавления: .bash_profile и .bashrc (если вы действительно используете bash.)

0 голосов
/ 27 февраля 2010

По умолчанию manage.py ищет модуль настроек в том же каталоге, что и сам. Если он не находит его, он отправляет сообщение, чтобы вместо него использовать django-admin.py. На самом деле он не устанавливает environemnt, пока не запустит execute_manager. Если вам нужно запустить свои хуки перед вызовом ваших функций управления, то практика, которую я видел, предлагает поместить их в models.py соответствующего приложения.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...