Пути к модулям
Любой проект на django содержит как минимум 2 модуля python
- модуль настроек проекта - settings, urls, wsgi
- модуль вашего приложения с представлениями, шаблонами, статикой и прочим
Если вы положите ваш скрипт в корень проекта, то, скорее всего, проблем не возникнет.
Однако, в больших проектах, так делать не очень удобно, тем более хранить такие
скрипты там в дальнейшем (для демонстрации работы непонятной функции например)
А если положите в какой-нибудь модуль, то изменятся пути к остальным скриптам проекта
и импорты не будут работать:
from my_app import views # не работает т.к. my_app не в PYTHONPATH
Чтобы исправить надо прописывать корневую директорию проекта в системную переменную PYTHONPATH
или вызывать скрипты всегда из этой директории
Settings и Django ORM
Правильно загружать файл настроек Django надо с помощью
from django.conf import settings
Однако, чтобы воспользоваться этим вам надо
- задать переменную DJANGO_SETTINGS_MODULE
- выполнить django.setup() до импорта settings
C ORM ситуация такая же, если выполните import ваших моделей, до того как выполните
django.setup(), ORM будет не рабочей.
Вот и появляются весьма странные конструкции
if __name__ == '__main__':
import sys, os
from os.path import abspath, dirname, join
sys.path.insert(0, abspath(join(dirname(__file__), '..')))
os.environ["DJANGO_SETTINGS_MODULE"] = "project.settings"
import django
django.setup()
в самом верху скрипта, где по pythonic-way ничего кроме import быть не должно!