Использовать django: от "python manage.py shell" до python script
Я могу перейти в каталог проекта python (скажем c:\www\myproject), а затем выпустить
python manage.py shell
а затем я могу использовать все модули из проекта django, скажем, следующую команду команд из команды оболочки:
import settings
from django.template import Template, Context
t=Template("My name is {myname}.")
c=Context({"myname":"John"})
f = open('write_test.txt', 'w')
f.write(t.render(c))
f.close
теперь, когда я попытался собрать все мои команды в python script, скажем, "mytest.py", я не могу выполнить script. Я должен пропустить что-то важное.
Я выпустил python mytest.py
тогда я получил Import error: could not import settings
Является ли это на пути sys? "
Я в каталоге проекта, где settings.py находится.....
Может кто-нибудь помочь мне?
спасибо.
Ответы
Ответ 1
Попробуйте вместо команду управления Django.
# myproject/myapp/management/commands/my_command.py
from django.core.management.base import NoArgsCommand
from django.template import Template, Context
from django.conf import settings
class Command(NoArgsCommand):
def handle_noargs(self, **options):
t=Template("My name is {myname}.")
c=Context({"myname":"John"})
f = open('write_test.txt', 'w')
f.write(t.render(c))
f.close
И затем (если вы следуете документам) вы сможете выполнить команду следующим образом:
python manage.py my_command
Ответ 2
Этот метод устарел в Django 1.4. Вместо этого используйте django.conf.settings.configure()
(см. ответ @adiew, например, код).
Далее следует старый метод.
Поместите это в начало вашего script
from django.core.management import setup_environ
import settings
setup_environ(settings)
Это действительно то, что делает manage.py за сценой. Чтобы увидеть его, посмотрите источник Django в django/core/management/__init__.py
. После выполнения этих строк все должно быть как в ./manage.py shell
.
Ответ 3
Попробуйте поместить эти две строки в начало вашего script:
from django.conf import settings
settings.configure() # check django source for more detail
# now you can import other django modules
from django.template import Template, Context
Ответ 4
ОБНОВЛЕНИЕ: От другое сообщение.
./manage.py shell < myscript.py
Ответ 5
Для импорта настроек Django используйте:
from django.conf import settings
Ответ 6
Вместо того, чтобы вручную добавлять вещи к вашему python script или соответствовать формату команды управления, в случае, если это не то, что нужно долгое время, вы можете получить все преимущества среды Django, выполнив ваш script с ./manage.py runscript <myscript.py>
... но если ваш script находится в папке проекта, вы можете просто добавить эту строку в начало python script: import os; os.environ['DJANGO_SETTINGS_MODULE'] = 'settings'
Ответ 7
Выделите fooobar.com/questions/44105/... хорошее решение для Django >= 1.7, и если кто-то использует django-конфигурации это сработало для меня:
import sys, os, django
sys.path.append('/path/to/project')
os.environ.setdefault("DJANGO_SETTINGS_MODULE", "config.local") # path to config
## if using django-configurations
os.environ.setdefault("DJANGO_CONFIGURATION", "Local")
from configurations import importer
importer.install()
django.setup() ## apparently important for django 1.7
from foo.models import Bar
print Bar.objects.all()
Ответ 8
Вот еще один вариант: я написал и часто использую команду управления "run", которая имеет то преимущество, что скрипты могут видеть их параметры командной строки:
http://lino-framework.org/api/lino.management.commands.run.html